У меня есть простая модель с 1 первичным ключом и 3 полями (упрощенно):
- проходной балл
- Максимальный балл
- Макс. Попытка
Эта модель создана путем наследования от django.db.models
. Это минимальный воспроизводимый код:
from django.db import models
class QuestionSet(models.Model):
passingscore = models.PositiveSmallIntegerField("passing score")
maxscore = models.PositiveSmallIntegerField("max score")
maxattempt = models.PositiveSmallIntegerField("max attempt")
Я хотел бы добавить ограничение, чтобы passingscore
никогда не превышало maxscore
в базе данных.
Я использовал ограничение, охватывающее несколько полей, например unique_together
, согласно этого потока в StackOverflow . Но ясно, что это другой вариант использования.
Я также кратко рассмотрел возможность добавления ограничения непосредственно при написании кода PostgreSQL:
ALTER TABLE tableB ADD CONSTRAINT score_policy_1 CHECK (maxscore >= passingscore)
Но это противоречит цели использования ORM и нарушает философию «слабо связанных», что затрудняет миграцию между различными бэкэндами базы данных.
Если это вообще возможно, пожалуйста, укажите мне более идиоматический способ написания этого ограничения в Django.