[英]Modify unique_together contraint on through model
I have a Rate model defined as follow:我的速率 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')
It is an intermediate model between my User and my Project model.它是我的用户和我的项目 model 之间的中间 model。
It's created like this on my project model:它是在我的项目 model 上这样创建的:
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')
I added the unique_together constraint on the model because I want to be able to have 2 entries as:我在 model 上添加了 unique_together 约束,因为我希望能够有 2 个条目:
Basically I want to be able to associate one user to the same project multiple time, changing the level.基本上我希望能够将一个用户多次关联到同一个项目,从而改变级别。
But when I do it I receive:但是当我这样做时,我会收到:
IntegrityError at /admin/api/user/6/change/ duplicate key value violates unique constraint "api_project_reviewers_project_id_user_id_cd9f7f42_uniq" DETAIL: Key (project_id, user_id)=(1, 6) already exists.
/admin/api/user/6/change/ 的 IntegrityError 重复键值违反了唯一约束“api_project_reviewers_project_id_user_id_cd9f7f42_uniq” 详细信息:键 (project_id, user_id)=(1, 6) 已存在。
which is totally right byt shouldn't raise an error.这是完全正确的,不应该引发错误。
How can I remove the unique_together constraint on user and project?如何删除用户和项目的 unique_together 约束?
As suggested by sudden_appearance, I tried to do this:正如 burst_appearance 所建议的,我尝试这样做:
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')
but I still got the same issue Thanks但我仍然遇到同样的问题谢谢
I think what you want is symmetrical=False
on m2m model我认为您想要的是在 m2m model 上
symmetrical=False
Try changing尝试改变
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')
to至
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate', symmetrical=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.