如何使用django建模对称关系?

Con*_*ens 22 django django-models

让我们使用朋友的经典例子.

class Friendship(models.Model):
    user1 = models.ForeignKey(User, related_name='friends1')
    user2 = models.ForeignKey(User, related_name='friends2')
    handshakes = models.PositiveIntegerField()
    hugs = models.PositiveIntegerField()
    # other silly data
Run Code Online (Sandbox Code Playgroud)

友谊中的两个朋友(user1和user2)应该完全相同.我应该可以说(user1,user2)是unique_together而不必担心(user2,user1)意外出现.我应该能够轻松地获得给定用户的所有朋友,但相反,我必须编写一个自定义管理器或创建一些其他方式来获取所有友谊,其中该用户是user1在关系中,以及所有友谊所在的地方该用户是user2.

我正在考虑尝试编写自己的SymmetricKey.有人请阻止我.

des*_*ido 8

退房symmetrical的选项ManyToManyField的文档 -听起来就像它可以做你想做的.

对于你正在做的具体方式,我会做类似的事情

class LameUserExtension(User):
    friends = ManyToManyField("self", through=Friendship)

class Friendship(models.Model):
    # the stuff you had here
Run Code Online (Sandbox Code Playgroud)