Wagtail:按子项上的字段过滤页面模型
Wagtail: Filter Page model by a field on the child
我有两个模型,ParentPage
和 ChildPage
。我想在 ChildPage
.
上找到 ParentPage
的集合,其中字段 is_completed
是 True
通常在 Django 中,我可以做类似
的事情
ParentPage.objects.filter(child_page__is_completed=True)
但是,我认为这里没有 Wagtail/Treebeard 层次结构的联接。
我还认为您可以通过多个 ParentPage
来过滤 ChildPage
,例如ChildPage.objects.children_of([parent_ids])
,但我也看不到这样做的方法。
有没有更简单的方法?
页面 table 有 path
和 url_path
列。如果找到所有子页面并去掉 path
或 url_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)
免责声明:未经测试的代码。
我有两个模型,ParentPage
和 ChildPage
。我想在 ChildPage
.
ParentPage
的集合,其中字段 is_completed
是 True
通常在 Django 中,我可以做类似
的事情ParentPage.objects.filter(child_page__is_completed=True)
但是,我认为这里没有 Wagtail/Treebeard 层次结构的联接。
我还认为您可以通过多个 ParentPage
来过滤 ChildPage
,例如ChildPage.objects.children_of([parent_ids])
,但我也看不到这样做的方法。
有没有更简单的方法?
页面 table 有 path
和 url_path
列。如果找到所有子页面并去掉 path
或 url_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)
免责声明:未经测试的代码。