我有一个定义如下的速率模型:
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)