我想模拟用户之间的关系。例如:他们彼此认识吗?
这是我的第一个猜测:
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
,并且同一两个人拥有两个Relation
个实例。
要解决此问题,我尝试在save()
方法和ModelForm
中添加内容以检查a.id < b.id
,以便我只能获得一个Relation
给定的人,但使用起来并不直观(当我们想要添加Relation
时,我们必须猜测好的顺序)
有没有更好的方法在Django模型中存储唯一的对(组合)?
感谢。
答案 0 :(得分:1)
为了快速修复,我会使用m2m_changed pre_add信号处理程序“将a和b按正确顺序排列”。
对于“正确”的解决方案,我会使用http://charlesleifer.com/blog/self-referencing-many-many-through/博客中的“对称关系 - Facebook模型”部分。
如果你不能明智地承担这种重复性能,那么你应该让管理者发挥创意,这将是毛茸茸的。
答案 1 :(得分:0)
作为参考,ManyToManyField
现在有一个symmetrical
选项。