Django-为两个或多个字段一起创建唯一的数据库约束
假设,我想记录用户每天的民意测验选择。在本例中,我有一个名为Django-为两个或多个字段一起创建唯一的数据库约束,django,django-models,Django,Django Models,假设,我想记录用户每天的民意测验选择。在本例中,我有一个名为vote的表,其中包含poll、choice和user id列。因此,我如何才能排除限制(可能在django模型中,或在任何可能的情况下),poll和user id对于任何条目都不应该相同,但就像同一个用户可以对不同的民意调查进行一次投票一样,显然不同的用户可以对相同的民意调查进行投票一样。我希望我明白了 模型的Meta类的unique\u together属性就是您要寻找的: class Meta: unique_togeth
vote
的表,其中包含poll
、choice
和user id
列。因此,我如何才能排除限制(可能在django模型中,或在任何可能的情况下),poll
和user id
对于任何条目都不应该相同,但就像同一个用户可以对不同的民意调查进行一次投票一样,显然不同的用户可以对相同的民意调查进行投票一样。我希望我明白了 模型的Meta
类的unique\u together
属性就是您要寻找的:
class Meta:
unique_together = ('poll', 'user_id')
查看更多信息。可能就是您要查找的。您希望将
唯一属性组合在一起
属性:
Django 2.2引入了
UniqueConstraint
,中的注释表明unique\u合在一起
将来可能会被弃用。参见弃用说明
您可以将UniqueConstraint
添加到模型类的Meta.constraints
选项中,如下所示:
类元:
约束=[
models.UniqueConstraint(字段=['poll','user\u id'],name=“user polled”)
]
你需要在两个紧括号之间加一个逗号,我想unique_together=(('poll','user_id'),)
。实际上不需要这个逗号:据我所知,如果你在某些方面不满意,你可以建议对这个答案进行编辑。假设你建议的编辑不是废话,你会为这个世界做出积极的贡献,那么你就会被接受。在答案仍然正确的情况下,对3年前的答案进行否决似乎有点不必要,但我想这是你的特权。你必须同意,只有一句带有链接的答案,而这个链接已断开,这不是一个真正好的答案,是吗?:)相反,有一个被上浮的是接受的,链接是正确的。这就是为什么一个我重视另一个我不重视的原因。我认为,可能的Django旧版本(如2.0.6)的副本不受支持。或者有解决办法吗?正如其他答案所建议的那样,这里有unique\u。顺便说一句,Django 2.0已不受支持,如果您可以更新它,请执行此操作!为什么文档中没有显示uniqueTogether
的用法?我来到这里发现我必须把它放在一个名为constraints
的列表中,在model@RobertJohnstone我想这只是Django文档的一个怪癖。我也必须参考其他资源来了解一些组件的用法。