Wagtail CheckConstraint,live列不存在

问题描述 投票:0回答:1

我有这样的模型

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 专栏是页面的一部分。如何解决这个问题?

python django wagtail
1个回答
0
投票

Wagtail 中的页面模型利用了多表继承,其中在基本 Page 类上定义的字段(例如

live
)是
wagtailcore_page
表的一部分,而在您自己的页面模型上定义的字段(例如如此处的
price
)位于单独的表中。检查约束是在数据库级别强制执行的,因此不可能定义涉及多个表中的字段的约束。

通过测试

save
方法中的相关字段并在条件失败时引发异常,可以在 Python / Django 级别近似检查约束的行为。

© www.soinside.com 2019 - 2024. All rights reserved.