Django: модель UniqueConstraint выдает ошибку при миграции - PullRequest
0 голосов
/ 16 января 2020

В моем проекте Django в одной из моделей мне нужно использовать два экземпляра UniqueConstraint. Но когда я добавляю это и выполняю миграцию после запуска makemigrations, он выдает ошибку в терминале.

Класс модели:

class MyDays(models.Model):
    class Meta:
        verbose_name = "My Day"
        verbose_name_plural = "My Days"
        constraints = [
            models.UniqueConstraint(fields=['userid', 'date', 'from'], condition=Q(status=1), name='user_date_from_a'),
            models.UniqueConstraint(fields=['userid', 'date', 'to'], condition=Q(status=1), name='user_date_to_b')
        ]

    id = models.BigAutoField(primary_key=True)
    userid = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="User")
    date = models.DateField(auto_now_add=False, editable=True, validators=[validate_date])
    from = models.TimeField(auto_now_add=False, editable=True)
    to = models.TimeField(auto_now_add=False, editable=True)
    status = models.ForeignKey(Status, on_delete=models.CASCADE, verbose_name="Status", default=1)

Когда я запускаю python3 manage.py migrate, он выдает следующую ошибку:

django .core.exceptions.FieldError: Связанные ссылки на поля не разрешены в этом запросе

Мне нужны уникальные записи, только если статус равен 1 вместе с 3 другими комбинациями полей. Что я делаю неправильно? Как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 19 января 2020

Try fields=['userid_id'...

Похоже, UniqueConstraint s пытаются присоединиться к пользовательской таблице.

Django берет ваши ForeignKeys и OneToOneFields и добавляет _id до конца создать столбец БД, хранящий первичный ключ связанного объекта (обычно целое число). По этой причине обычно не следует ставить «id» в конце имен связанных объектов.

Так что, если my_days является экземпляром MyDays, то my_days.userid является экземпляром пользователя, а my_days.userid_id (обычно) целое число.

Если поведение с unique_together отличается, это можно считать ошибкой в ​​UniqueConstraint.

...