ForeignKey
s在django上有屬性on_delete來指定刪除引用對象時的行爲。有什麼辦法可以得到類似ManyToManyField的東西嗎?django ManyToManyField和on_delete
假設我有以下的模型
class House(models.Model):
owners = models.ManyToManyField(Person)
的默認行爲是級聯的,所以如果我刪除發生在自己的房子的人,它只是從業主(即,很明顯,它消失無更長的時間擁有任何房屋)。我想要的是,如果一個人是一個所有者,它不能被刪除。那就是,我想要on_delete=models.PROTECT
。這可能嗎?
我在內部知道ManyToManyField
被翻譯成另一個模型,其中有兩個ForeignKey
(在這種情況下,一個房子和一個人),所以它應該有可能實現這一點。任何想法如何?我想避免將through屬性設置爲新模型,因爲這會導致創建一個新表(我希望保留舊錶)。
編輯:我已經追蹤Django在何處創建相應的M2M模型:
def create_many_to_many_intermediary_model(field, klass):
from django.db import models
# ...
# Construct and return the new class.
return type(name, (models.Model,), {
'Meta': meta,
'__module__': klass.__module__,
from_: models.ForeignKey(klass,
related_name='%s+' % name,
db_tablespace=field.db_tablespace),
to: models.ForeignKey(to_model,
related_name='%s+' % name,
db_tablespace=field.db_tablespace)
})
相關線上
to: models.ForeignKey(to_model,
related_name='%s+' % name,
db_tablespace=field.db_tablespace)
我想它是
to: models.ForeignKey(to_model,
related_name='%s+' % name,
db_tablespace=field.db_tablespace,
on_delete=models.PROTECT)
任何方式來做到這一點,而不是猴子修補整個事情併爲ManyToManyField創建一個新類?
感謝您的回答。我不知道我可以如此輕鬆地遷移數據,但是透明的表格會爲我產生太多的膨脹代碼。我有多個ManyToManyField,我不想爲它們中的每一個都有一個明確的表,因此我決定使用猴子修補代碼,並簡單地用一個新類ProtectedManyToManyField替換ManyToManyField – Clash 2013-05-07 00:07:27
@Clash。你好,你是如何設法實現ProtectedManyToManyField的? – 2015-02-04 18:05:57
@AndrewFount - 我不認爲你會得到這個通知,否則,所以我在這個評論中提到你。衝突貼在這裏:http://stackoverflow.com/a/35827978/901641 – ArtOfWarfare 2016-03-07 02:40:25