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/