首页 > 解决方案 > 过滤从 Wagtail 核心页面导入的多个模型的自定义字段

问题描述

我有两个Page共享一个字段的自定义模型,例如:

class CustomPageModelOne(Page):
    custom_field = models.IntegerField()
    ...

class CustomPageModelTwo(Page):
    custom_field = models.IntegerField()
    ...

Page理想情况下,我需要跨两种类型的自定义模型运行单个过滤器。Wagtail 文档说我可以使用一种exact_type方法来指定从 core 继承的多个模型Page,因此我正在尝试以下一些变体:

Page.objects.exact_type(CustomPageModelOne, CustomPageModelTwo).filter(custom_field=123)

但是,当我尝试过滤使用这两种模型的任何 QuerySet 时,我收到一个错误:

django.core.exceptions.FieldError:无法将关键字“custom_field”解析为字段。

如何跨共享一个字段的多个 Wagtail 自定义页面模型进行查询?

注意:我考虑过创建一个继承自 的抽象类Page,但无法在需要的文件中导入该抽象模型。

抽象类示例:

class CustomFieldModel(Page):
    custom_field = models.IntegerField()

    class Meta:
        abstract = True

class CustomPageModelOne(CustomFieldModel):
    pass

class CustomPageModelTwo(CustomFieldModel):
    pass

标签: djangowagtail

解决方案


正如您所做的那样Page.objects...,您只能过滤Page 模型的字段Page

要专门过滤您的字段,CustomPageModelOne您必须使用CustomPageModel.objects...该模型具有该字段的位置,并且您的两个自定义页面模型都是来自的子类


推荐阅读