我有這樣看起來是這樣一種模式:Django - ManyToMany中的對稱ForeignKeys或級聯刪除?
class Bar(models.Model):
foo1 = models.ForeignKey(Foo, related_name='bar_foo1')
foo2 = models.ForeignKey(Foo, related_name='bar_foo2')
class Meta:
unique_together = ('foo1', 'foo2')
問題是foo1
和foo2
需要有相同的行爲,他們被反轉時。換句話說,就是這樣的:「如果你喜歡foo1,你可能想檢查foo2」,應該以其他方式應用(「如果你喜歡foo2,你可能想檢查foo1」)。
所以我用一個多對多場,而不是ForeignKey的,使它們對稱:
class Bar(models.Model):
foos = models.ManyToManyField(Foo)
的信號以確保有從來沒有超過2 foos
:
def foos_changed(sender, **kwargs):
if kwargs['instance'].foos.count() > 2:
raise ValidationError("You can't assign more than two foos.")
m2m_changed.connect(foos_changed, sender=Bar.foos)
不過,這會另一個問題是,如果foos
中的Foo
被刪除,Bar
只是停留在那裏,但它也應該被刪除(這是通過在ForeignKeys中級聯刪除來解決的)。
我該如何解決這個問題?我可以使ForeignKeys對稱嗎?或者在ManyToMany中實現級聯刪除?還是有另一種方法來解決這個問題?
偉大的解決方案!非常感謝你! – Filly 2014-09-25 13:47:56