django - 两个 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=1
,user_b=2
将约束user_a=2
,user_b=1
而不是完全重复。
有没有办法做到这一点,而无需自定义逻辑来检查是否保存团队?我目前只是让它们重复,然后使用 RawSQL 查询删除重复的字段。
解决方案
我已经检查过了,你可以在你的模型中使用类的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')
如果它不适合您的需要,您可以覆盖模型的save
或validate_unique
方法。在此处查看相关文档。但是您需要添加自定义逻辑。
推荐阅读
- python - 蟒蛇中的曼德布洛特
- python - 如何并行化“for”循环?
- python - 基于端口(8001、8002、8003)的本地主机上的Django站点框架
- scala - 用于主题标签的 Scala 正则表达式
- mysql - SELECT 任职时间最长的分行经理
- continuous-integration - 是否可以通过 Slack 消息触发 TravisCI 构建而无需启动我自己的服务器?
- foreach - ForEach 通过多个 TextField 来验证 SwiftUI 中是否为空
- excel - Excel - 如何找到具有文本的行的最大值,并且文本对应于不同表格中的数字?
- android - 将 PageController 向左对齐而不调整大小
- r - Group_by,并创建具有持续时间的新列