在从 Wagtail 核心页面导入的多个模型中过滤自定义字段
Filter on custom field across multiple models that import from Wagtail core Page
我有两个共享共同字段的自定义 Page
模型,例如:
class CustomPageModelOne(Page):
custom_field = models.IntegerField()
...
class CustomPageModelTwo(Page):
custom_field = models.IntegerField()
...
我需要 运行,理想情况下,需要一个过滤器跨越两种类型的自定义 Page
模型。 Wagtail 文档说我可以使用 exact_type
方法来指定从核心 Page
继承的多个模型,所以我正在尝试以下的一些变体:
Page.objects.exact_type(CustomPageModelOne, CustomPageModelTwo).filter(custom_field=123)
但是,当我尝试过滤任何使用这两种模型的 QuerySet 时,出现错误:
django.core.exceptions.FieldError: Cannot resolve keyword 'custom_field' into field.
如何查询共享一个共同字段的多个 Wagtail 自定义页面模型?
注意:我考虑过创建一个继承自 Page
的抽象 class,但无法在需要的文件中导入该抽象模型。
摘要class示例:
class CustomFieldModel(Page):
custom_field = models.IntegerField()
class Meta:
abstract = True
class CustomPageModelOne(CustomFieldModel):
pass
class CustomPageModelTwo(CustomFieldModel):
pass
正如您所做的那样 Page.objects...
您只能过滤 fields of the Page model 和 Page
的子类
要专门针对 CustomPageModelOne
的字段进行过滤,您必须使用 CustomPageModel.objects...
该模型具有该字段并且您的自定义页面模型都是
的子类
显然 Page.objects.exact_type
仅返回基于 Page
的查询集,这是有道理的,因为 exact_type
无法知道从 [=12= 派生的模型中会出现哪些字段].如果重新构建模型不是一种选择,我建议将以下方法作为替代方法:
from itertools import chain
model_one_results = CustomPageModelOne.objects.filter(custom_field=123)
model_two_results = CustomPageModelTwo.objects.filter(custom_field=123)
all_results = list(chain(model_one_results, model_two_results))
我有两个共享共同字段的自定义 Page
模型,例如:
class CustomPageModelOne(Page):
custom_field = models.IntegerField()
...
class CustomPageModelTwo(Page):
custom_field = models.IntegerField()
...
我需要 运行,理想情况下,需要一个过滤器跨越两种类型的自定义 Page
模型。 Wagtail 文档说我可以使用 exact_type
方法来指定从核心 Page
继承的多个模型,所以我正在尝试以下的一些变体:
Page.objects.exact_type(CustomPageModelOne, CustomPageModelTwo).filter(custom_field=123)
但是,当我尝试过滤任何使用这两种模型的 QuerySet 时,出现错误:
django.core.exceptions.FieldError: Cannot resolve keyword 'custom_field' into field.
如何查询共享一个共同字段的多个 Wagtail 自定义页面模型?
注意:我考虑过创建一个继承自 Page
的抽象 class,但无法在需要的文件中导入该抽象模型。
摘要class示例:
class CustomFieldModel(Page):
custom_field = models.IntegerField()
class Meta:
abstract = True
class CustomPageModelOne(CustomFieldModel):
pass
class CustomPageModelTwo(CustomFieldModel):
pass
正如您所做的那样 Page.objects...
您只能过滤 fields of the Page model 和 Page
要专门针对 CustomPageModelOne
的字段进行过滤,您必须使用 CustomPageModel.objects...
该模型具有该字段并且您的自定义页面模型都是
显然 Page.objects.exact_type
仅返回基于 Page
的查询集,这是有道理的,因为 exact_type
无法知道从 [=12= 派生的模型中会出现哪些字段].如果重新构建模型不是一种选择,我建议将以下方法作为替代方法:
from itertools import chain
model_one_results = CustomPageModelOne.objects.filter(custom_field=123)
model_two_results = CustomPageModelTwo.objects.filter(custom_field=123)
all_results = list(chain(model_one_results, model_two_results))