Django - 一起为2个或更多字段创建唯一的数据库约束

zub*_*hta 23 django django-models

假设,我想每天记录用户的民意调查.在这种情况下,我有一个名为votewhich的表poll,choiceuser-id.那么我怎么能摆脱约束(可能在django模型中或在任何可能的情况下),poll并且user-id两者对于任何条目都不应该相同,但是像同一个用户可以投票一次进行各种不同的民意调查,显然各种用户可以投票给同一个民意调查.我希望我很清楚.

seb*_*piq 36

您正在寻找的模型类的unique_together属性Meta:

class Meta:
    unique_together = ('poll', 'user_id')
Run Code Online (Sandbox Code Playgroud)

查看django文档以获取更多信息.

  • 您需要在两个右括号之间使用逗号,我认为`unique_together = (('poll', 'user_id'),)`。 (2认同)

Oli*_*ier 15

unique_together可能就是你要找的东西.


Nit*_*ain 10

引入UniqueConstraint了Django 2.2 ,有关此主题官方文档中的注释表明unique_together将来可能不推荐使用。请参阅此处的弃用说明。

您可以像这样添加UniqueConstraintMeta.constraints模型类的选项中:

class Meta:
    constraints = [
        models.UniqueConstraint(fields=['poll', 'user_id'], name="user-polled")
        ]
Run Code Online (Sandbox Code Playgroud)