Изменить ограничение unique_together на сквозную модель
У меня есть модель Rate, определенная следующим образом:
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')
Это промежуточная модель между моей моделью пользователя и моделью проекта.
В моей модели проекта он создан следующим образом:
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')
Я добавил ограничение unique_together на модель, потому что я хочу иметь возможность иметь 2 записи как:
- Вход 1: Пользователь 1, проект 1, ставка 100, уровень 1
- Вход 2: Пользователь 1, проект 1, ставка 100, уровень 2
В основном я хочу иметь возможность привязать одного пользователя к одному проекту несколько раз, изменяя уровень.
Но когда я делаю это, я получаю:
IntegrityError at /admin/api/user/6/change/ duplicate key value нарушает ограничение уникальности "api_project_reviewers_project_id_user_id_cd9f7f42_uniq" DETAIL: Ключ (project_id, user_id)=(1, 6) уже существует.
что совершенно правильно, byt не должен вызывать ошибку.
Как убрать ограничение unique_together для пользователя и проекта?
Спасибо
Я думаю, что вы хотите symmetrical=False на модели m2m
Попробуйте изменить
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate')
to
reviewers = models.ManyToManyField(User, related_name="review_project", through='Rate', symmetrical=False)