Django Wagtail:按子级上的字段筛选页面模型

Django Wagtail:按子级上的字段筛选页面模型,django,parent-child,wagtail,django-treebeard,Django,Parent Child,Wagtail,Django Treebeard,我有两种型号,ParentPage和ChildPage。我想在ChildPage上找到一组ParentPages,其中一个字段已完成为True 通常在Django,我可以做类似的事情 ParentPage.objects.filter(子页面已完成=True) 但是,我不认为这里有摇尾树/树羚层次结构的连接 我还认为您可能能够通过多个父页面筛选子页面,例如([parent\u id])的子页面.objects.ChildPage的子页面,但我也看不到一种方法 有更简单的方法吗?页面表有path和

我有两种型号,
ParentPage
ChildPage
。我想在
ChildPage
上找到一组
ParentPage
s,其中一个字段
已完成
True

通常在Django,我可以做类似的事情

ParentPage.objects.filter(子页面已完成=True)

但是,我不认为这里有摇尾树/树羚层次结构的连接

我还认为您可能能够通过多个
父页面
筛选
子页面
,例如([parent\u id])的
子页面.objects.ChildPage的子页面,但我也看不到一种方法


有更简单的方法吗?

页面表有
path
url\u path
列。如果找到所有子项并去掉
路径
url\u路径
的最后一部分,则可以使用该结果查询父页面

路径:

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)

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

我的另一个想法是在save上设置外键。可能仍然值得做,这取决于相比之下的性能。
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)