首页 > 解决方案 > 日期时间的 Django 检查约束

问题描述

我有这个模型:

class MyModel(models.Model):
    creation_datetime = models.DateTimeField()
    expiration_datetime = models.DateTimeField()
  
    class Meta:
        constraints = [
            CheckConstraint(
                check=####
            )
        ]


我正在尝试编写一个检查约束来确保expiration_dateime > creation_dateime. 我无法找到正确使用 Q 对象的方法,不胜感激。

标签: djangodjango-models

解决方案


对于 Django 3.1:

from django.db import models
from django.db.models import F, Q

class MyModel(models.Model):
    creation_datetime = models.DateTimeField()
    expiration_datetime = models.DateTimeField()

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=Q(expiration_dateime__gt=F('creation_datetime')),
                name="mycustomconstraint_check1"
            )
        ]

使用 F 表达式:https ://docs.djangoproject.com/en/3.1/ref/models/expressions/#f-expressions 。

更具体:https ://docs.djangoproject.com/en/3.1/topics/db/queries/#using-f-expressions-in-filters 。


推荐阅读