Django:用户之间的关系(存储唯一对/组合)

Django:用户之间的关系(存储唯一对/组合),django,django-models,Django,Django Models,我想对用户之间的关系进行建模。例如:他们彼此认识吗 我的第一个猜测是: class Relation(models.Model): a = models.ForeignKey(User, related_name='related_a') b = models.ForeignKey(User, related_name='related_b') met = models.BooleanField(default=False) class Meta:

我想对用户之间的关系进行建模。例如:他们彼此认识吗

我的第一个猜测是:

class Relation(models.Model):
    a = models.ForeignKey(User, related_name='related_a')
    b = models.ForeignKey(User, related_name='related_b')
    met = models.BooleanField(default=False)

    class Meta:
        unique_together = ('a', 'b')
显然,该模型允许
a==b
,并为同一两个人提供两个
关系
实例

为了解决这个问题,我尝试在
save()
方法中添加东西,并在
ModelForm
中检查
a.id
,这样我只能为两个给定的人获得一个
关系,但使用起来并不直观(当我们想要添加
关系时,必须猜测好的顺序)

有没有更好的方法在Django模型中存储唯一的对(组合)


谢谢。

对于快速修复,我将使用一个m2m_更改的pre_add信号处理程序,“将a和b按正确顺序排列”

对于“正确的”解决方案,我将使用博客中的“对称关系-Facebook模式”部分


如果从性能上看,您负担不起这种复制,您应该与管理者一起发挥创意,这将是一件棘手的事情。

作为参考,
ManyToManyField
现在有了一个选项。

您是否尝试扩展用户模型以添加字段,比如说
knowuser=models.ManyToManyField('auth.User',blank=True)
(如果只有一个或几个)
models.BooleanField
,这将是正确的做法;但是在我的应用程序中,也有
模型。IntegerField
,甚至还有
模型。DateField
:(是的,我认为“对称关系”(即复制a-b和b-a关系)是我的用例的一个很好的答案,谢谢你!谢谢你的博客链接,顺便说一句,看起来很好:)