Ограничения уровня БД для проверки одного поля относительно другого в Django - PullRequest
0 голосов
/ 27 апреля 2020

Можно ли использовать ограничение Django в модели (models.CheckConstraint class) для создания ограничения для проверки значения одного поля относительно другого?

Например:

class Season(models.Model):
last_watched_episode = models.PositiveSmallIntegerField(
    null=True,
)
number_of_episodes = models.PositiveSmallIntegerField(

)

В этом случае мне нужно создать ограничение, которое вызовет ошибку, если значение поля last_watched_episode больше поля number_of_episodes. 9> 8 например. Плюс в случае, если ограничение last_watched_episode is Null ( none ) должно быть опущено (сравнение не может Null и int )

У меня есть модель и сериализатор валидаторы уже есть, но цель - создать ограничения уровня БД. Можно создать способ с помощью RAW SQL и пользовательской миграции, но предпочтительнее использовать ограничения DJANGO. Спасибо. DB - postgres 12

1 Ответ

0 голосов
/ 27 апреля 2020

Обнаружено, что можно использовать F в ограничениях:

    class Meta:
        constraints = [
           models.CheckConstraint(name='mutual_watched_episode_and_number_of_episodes_check',
check = (models.Q(number_of_episodes__gte=models.F('last_watched_episode')))
            ),
        ]

Таким образом, это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...