0
創建一個「超級對稱」關係我有這樣的模式:在Django中如何在多對多的自我關係
class People(models.Model):
name = models.CharField(max_length=128, db_index=True)
friends = models.ManyToManyField('self')
所以friends
關係對稱。所以如果你是我的朋友,我是你的朋友。
我也想爲我所有的朋友的朋友是自動我的朋友。例如:
如果A和B是朋友(AB,BA),並且我們向B添加新朋友C,則C也將自動添加到A(AB,BA,BC,CB,AC,CA)。如果我們從B拆下C,C將自動從A.
刪除我需要這在一個正常的管理頁面工作。在提交表單時,對於ManyToManyField,Django首先調用clean()
,刪除與當前實例相關的所有關係,然後添加add()
,添加來自表單的所有關係。
我能夠使用此代碼添加一個新的關係時(但在移除關係時,它不工作),以獲得良好的行爲:
def add_friends(sender, instance, action, reverse, model, pk_set, **kwargs):
if action == 'post_add':
if len(pk_set) > 1:
pk = pk_set.pop()
next = People.objects.get(pk=pk)
next.friends.add(*pk_set)
m2m_changed.connect(add_friends, sender=People.friends.through)
當解決方案搜索,我沒有創造困難時期一個無限循環。