首页 > 解决方案 > 用于验证 1 个字段与 Django 中的另一个字段的数据库级别约束

问题描述

有没有办法在模型(models.CheckConstraint 类)中使用 Django 约束来创建一个约束来验证一个字段的值与另一个字段的值?

例如:

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

)

last_watched_episode在这种情况下,我需要做一个约束,如果字段的值大于字段,则会引发错误number_of_episodes。例如 9 > 8。另外,如果应该省略if last_watched_episode is Null( none ) 约束(不能比较Nullint

我已经有模型和序列化验证器,但目标是创建数据库级别的约束。也可以使用 RAW SQL 和自定义迁移来创建它,但最好通过 DJANGO 约束。谢谢你。数据库-postgres 12

标签: djangodjango-models

解决方案


发现可以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')))
            ),
        ]

这样工作


推荐阅读