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关系)是我的用例的一个很好的答案,谢谢你!谢谢你的博客链接,顺便说一句,看起来很好:)