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

时间:2015-07-29 08:26:30

标签: 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:
        unique_together = ('a', 'b')

显然,此模型允许a == b,并且同一两个人拥有两个Relation个实例。

要解决此问题,我尝试在save()方法和ModelForm中添加内容以检查a.id < b.id,以便我只能获得一个Relation给定的人,但使用起来并不直观(当我们想要添加Relation时,我们必须猜测好的顺序)

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

感谢。

2 个答案:

答案 0 :(得分:1)

为了快速修复,我会使用m2m_changed pre_add信号处理程序“将a和b按正确顺序排列”。

对于“正确”的解决方案,我会使用http://charlesleifer.com/blog/self-referencing-many-many-through/博客中的“对称关系 - Facebook模型”部分。

如果你不能明智地承担这种重复性能,那么你应该让管理者发挥创意,这将是毛茸茸的。

答案 1 :(得分:0)

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