【问题标题】:DB level constraints to validate 1 field against another one in Django用于验证 1 个字段与 Django 中的另一个字段的数据库级别约束
【发布时间】:2020-08-10 15:38:22
【问题描述】:

有没有办法在模型中使用 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) 约束(无法比较 Nullint

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

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    发现可以在约束中使用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')))
                ),
            ]
    
    

    这样就可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2014-03-26
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2020-02-17
      相关资源
      最近更新 更多