首页 > 解决方案 > 两个 FK 对同一模型的唯一共同约束,无顺序

问题描述

我怎么能unique_together为模型做一个:

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

user_a而且我想确保user_b不能重复,不管它们是什么顺序。因此user_a=1user_b=2将约束user_a=2user_b=1而不是完全重复。

有没有办法做到这一点,而无需自定义逻辑来检查是否保存团队?我目前只是让它们重复,然后使用 RawSQL 查询删除重复的字段。

标签: djangodjango-modelsdjango-orm

解决方案


我已经检查过了,你可以在你的模型中使用类的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方法。在此处查看相关文档。但是您需要添加自定义逻辑。


推荐阅读