我有这样的模型
from wagtail.models import Page
class Article(Page):
price = PositiveIntegerField(
null=True,
blank=True,
)
class Meta:
constraints = [
CheckConstraint(check=Q(price__gte=100) & Q(live=True), name="min price for published"),
CheckConstraint(check=Q(price__lte=350000) & Q(live=True), name="max price for published"),
]
运行 makemigrations 后一切正常。但是当我尝试执行它时,出现错误
django.db.utils.ProgrammingError: column "live" does not exist
这怎么可能? live 专栏是页面的一部分。如何解决这个问题?
Wagtail 中的页面模型利用了多表继承,其中在基本 Page 类上定义的字段(例如
live
)是 wagtailcore_page
表的一部分,而在您自己的页面模型上定义的字段(例如如此处的 price
)位于单独的表中。检查约束是在数据库级别强制执行的,因此不可能定义涉及多个表中的字段的约束。
通过测试
save
方法中的相关字段并在条件失败时引发异常,可以在 Python / Django 级别近似检查约束的行为。