Изменить ограничение 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)
Вернуться на верх