Django CheckConstraints 检查 start_date 大于或等于今天

标签 django django-models django-constraints

    from django.db import models
    from django.db.models.functions import Now, TruncDay
    
    class Foo(models.Model):
      start_date = models.DateTimeField()
      end_date = models.DateTimeField()
    
      class Meta:
        constraints = [
          name="start_date must be greater than or equal today",
          check=CheckConstraints(start_date__gte=TruncDay(Now()))
        ]

像上面的代码一样,我想添加 CheckConstraint 来检查 start_date 是否大于或等于今天。
但是,在 makemigration 和 migrate 之后,发生了错误。

函数或表达式“CURRENT_TIME”不能在 check 子句中使用

我尝试了两种方法。

首先。

check = CheckConstraints(start_date__gte=timezone.now())

但是,迁移文件具有 timezone.now() 方法的结果,例如 datetime(2022, 01, 06, tzinfo=)

第二个。

check = CheckConstraints(start_date__gte=timezone.now)

check = CheckConstraints(start_date__gte=TruncDay(Now))

当我尝试迁移时,此试验出现错误功能无法解析

如何查看开始日期和今天?


提前感谢并为我的英语水平道歉。

最佳答案

我认为该错误是由于 CheckConstraint 而返回的。
您的导入:from django.db import models,因此您应该使用models.CheckConstraint()

from django.db import models
from django.db.models.functions import Now
from django.db.models import Q    

class Foo(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()

    class Meta:
        constraints = [
            models.CheckConstraint(
                check=Q(start_date__gte=Now()),
                name = "start_date must be greater than or equal today"
            )
    ]

文档中有解释,请参阅 constraint reference了解更多信息

关于Django CheckConstraints 检查 start_date 大于或等于今天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70604069/

相关文章:

django,在 SQL 中忽略 CharField 默认值

python - Python 中的线程 : Python 'args' is an invalid keyword argument for this function, 为什么?

由查询集填充的 Django 选择字段 - 保存 id 但显示值

css - django 模板 forloop.counter 问题

python - 如何使类 JSON 可序列化以在 Django session 中使用

javascript - Django View 组件没有对齐?

django - 在 Django 管理员之外使用 filter_horizo​​ntal 的最简单方法是什么