Wagtail:按子项上的字段过滤页面模型

Wagtail: Filter Page model by a field on the child

我有两个模型,ParentPageChildPage。我想在 ChildPage.

上找到 ParentPage 的集合,其中字段 is_completedTrue

通常在 Django 中,我可以做类似

的事情

ParentPage.objects.filter(child_page__is_completed=True)

但是,我认为这里没有 Wagtail/Treebeard 层次结构的联接。

我还认为您可以通过多个 ParentPage 来过滤 ChildPage,例如ChildPage.objects.children_of([parent_ids]),但我也看不到这样做的方法。

有没有更简单的方法?

页面 table 有 pathurl_path 列。如果找到所有子页面并去掉 pathurl_path 的最后部分,则可以使用该结果查询父页面。

路径:

child_paths = ChildPage.objects.filter(is_completed=True).values_list("path", flat=True)
parent_paths = set([cp[:-4] for cp in child_paths])
pages = Page.objects.filter(path__in=parent_paths)

Url路径:

child_urls = ChildPage.objects.filter(is_completed=True).values_list("url_path", flat=True)
parent_urls = set([url.rsplit('/', 1)[0] for url in child_urls])
pages = Page.objects.filter(url_path__in=parent_urls)

免责声明:未经测试的代码。