通过模型修改unique_together约束



我有一个定义如下的速率模型:

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')

它是介于我的User和我的Project模型之间的一个中间模型。

它是在我的项目模型上创建的:

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

我在模型上添加了unique_together约束,因为我希望能够有两个条目作为:

  • 条目1:User 1,Project 1,rate 100,level 1
  • 条目2:用户1,项目1,等级100,等级2

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

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

/admin/api/user/6/change/duplicate键值处的IntegrityError违反唯一约束"api_project_reviewers_project_id_user_id_cd9f7f42_uniq";细节:钥匙(project_id,user_id(=(1,6(已存在。

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

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

正如突然出现的建议,我尝试这样做:

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

但我还是有同样的问题感谢

我想你想要的是m2m型号上的symmetrical=False

尝试更改

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

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

最新更新