我有一个简单的模型,只有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中更为惯用的方式来编写此约束条件。