两个FK对同一模型的唯一共同约束,无顺序

时间:2019-01-28 13:40:24

标签: django django-models django-orm

如何为模型做unique_together

class Team(models.Model:
    user_a = models.ForeignKey(User, related_name='a')
    user_b = models.ForeignKey(User, related_name='b')

我想确保user_auser_b不能重复,无论顺序如何。 因此user_a=1user_b=2也会约束user_a=2user_b=1,而不是完全重复。

是否有一种方法可以执行此操作,而无需使用自定义逻辑来检查是否保存了团队?我目前只是让它们重复,然后使用RawSQL查询删除重复的字段。

1 个答案:

答案 0 :(得分:1)

我已经检查了,您可以在模型中将unique_together类的Meta属性与外键一起使用。尝试类似的东西:

class Team(models.Model:
    class Meta:
        unique_together = (("user_a", "user_b"))
    user_a = models.ForeignKey(User, related_name='a')
    user_b = models.ForeignKey(User, related_name='b')

如果它不适合您的需求,则可以覆盖模型的savevalidate_unique方法。请参阅相关文档here。但是您需要添加自定义逻辑。