繁体   English   中英

通过 model 修改 unique_together 约束

[英]Modify unique_together contraint on through model

我的速率 model 定义如下:

class Rate(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, limit_choices_to={'reviewer': True})
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    rate = models.IntegerField(
        default=100,
        validators=[
            MinValueValidator(0),
            MaxValueValidator(100)
        ]
    )
    level = models.IntegerField(default=1)
    objects = RateManager()

    class Meta:
        db_table = 'api_project_reviewers'
        unique_together = ('user', 'project', 'level')

它是我的用户和我的项目 model 之间的中间 model。

它是在我的项目 model 上这样创建的:

reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')

我在 model 上添加了 unique_together 约束,因为我希望能够有 2 个条目:

  • 条目 1:用户 1,项目 1,评分 100,级别 1
  • 条目 2:用户 1,项目 1,评分 100,级别 2

基本上我希望能够将一个用户多次关联到同一个项目,从而改变级别。

但是当我这样做时,我会收到:

/admin/api/user/6/change/ 的 IntegrityError 重复键值违反了唯一约束“api_project_reviewers_project_id_user_id_cd9f7f42_uniq” 详细信息:键 (project_id, user_id)=(1, 6) 已存在。

这是完全正确的,不应该引发错误。

如何删除用户和项目的 unique_together 约束?

正如 burst_appearance 所建议的,我尝试这样做:

reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')

但我仍然遇到同样的问题谢谢

我认为您想要的是在 m2m model 上symmetrical=False

尝试改变

reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')

reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate', symmetrical=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM