如何在 Wagtail 管理页面表单中获取未保存页面实例的页面祖先?
Howto get page ancestors in WagtailAdminPageForm for unsaved page instances?
我想在我的 customized admin form:
中获取当前页面的祖先页面
# models.py
class TopicPage(Page):
def get_topic_path(self):
return (
self
.get_ancestors(inclusive=True)
.filter(depth__gt=3)
.values_list('title', flat=True)
)
base_form_class = TopicPageForm
# forms.py
class TopicPageForm(WagtailAdminPageForm):
def save(self, commit=True):
page = super().save(commit=False)
page.get_topic_path()
if commit:
page.save()
return page
但是对于新的 TopicPage
实例,get_ancestors
在保存页面之前不要 return 任何东西:
- 添加新的
TopicPage
对象
- 发布此页面:
get_ancestors
returns 空查询集
- 再次发布此页面:
get_ancestors
return是预期的查询集
如何在 WagtailAdminPageForm
save() 方法中获取当前页面的祖先页面,即使是新的(未保存的)页面?
当WagtailAdminPageForm
被Wagtail的页面add/edit视图实例化时,它被传递给父页面;然后可以在表单对象上使用 self.parent_page
。 Wagtail 使用它来验证页面 slug 的唯一性,但您也可以在自定义 save
方法中使用它 - 在这种情况下,您可以通过在父级上调用 .get_ancestors(inclusive=True)
来复制 get_topic_path
页,并将 page.title
附加到结果。
我想在我的 customized admin form:
中获取当前页面的祖先页面# models.py
class TopicPage(Page):
def get_topic_path(self):
return (
self
.get_ancestors(inclusive=True)
.filter(depth__gt=3)
.values_list('title', flat=True)
)
base_form_class = TopicPageForm
# forms.py
class TopicPageForm(WagtailAdminPageForm):
def save(self, commit=True):
page = super().save(commit=False)
page.get_topic_path()
if commit:
page.save()
return page
但是对于新的 TopicPage
实例,get_ancestors
在保存页面之前不要 return 任何东西:
- 添加新的
TopicPage
对象 - 发布此页面:
get_ancestors
returns 空查询集 - 再次发布此页面:
get_ancestors
return是预期的查询集
如何在 WagtailAdminPageForm
save() 方法中获取当前页面的祖先页面,即使是新的(未保存的)页面?
当WagtailAdminPageForm
被Wagtail的页面add/edit视图实例化时,它被传递给父页面;然后可以在表单对象上使用 self.parent_page
。 Wagtail 使用它来验证页面 slug 的唯一性,但您也可以在自定义 save
方法中使用它 - 在这种情况下,您可以通过在父级上调用 .get_ancestors(inclusive=True)
来复制 get_topic_path
页,并将 page.title
附加到结果。