Che*_*uis 5 python django wagtail
创建新页面时,我需要根据父页面的值更改某些字段默认值。编辑现有页面时,这不是问题,但创建新页面时,我需要为字段设置默认值。我曾尝试覆盖管理表单,在 WagtailAdminPageForm 初始化时,parent_page 参数为空。如果我尝试在 Page 子类的 init 方法中执行此操作,则父信息中没有 arg 或 kwargs。
有没有办法获取新页面将成为父页面的页面?
这是我在 Page 构造函数上尝试过的
class CMSPage(Page):
.
.
.
def __init__(self, *args, **kwargs):
super(BaseContentMixin, self).__init__(*args, **kwargs)
if hasattr(self.get_parent().specific, 'published_site') and self.get_parent().specific.published_site == 'extranet':
self.published_site = 'extranet'
Run Code Online (Sandbox Code Playgroud)
这适用于编辑页面,对于新页面,我发现 NoneType 对象没有特定的属性。
Django 版本是 1.10,Python 版本是 3.6,Wagtail 版本是 1.9
澄清问题后,这是可能更合适的第二个答案。请注意,这需要 Wagtail 1.11.x,目前尚未发布。
首先为您的自定义页面表单创建一个新类,通常在 models.py 中或页面模型所在的任何位置。
from wagtail.wagtailadmin.forms import WagtailAdminPageForm
class MyCustomPageForm(WagtailAdminPageForm):
# Override the __init__ function to update 'initial' form values
def __init__(self, data=None, files=None, parent_page=None, *args, **kwargs):
print('parent_page', parent_page, parent_page.id, parent_page.title)
# update the kwargs BEFORE the init of the super form class
instance = kwargs.get('instance')
if not instance.id:
# only update the initial value when creating a new page
kwargs.update(initial={
# 'field': 'value'
'title': parent_page.id # can be anything from the parent page
})
# Ensure you call the super class __init__
super(MyCustomPageForm, self).__init__(data, files, *args, **kwargs)
self.parent_page = parent_page
Run Code Online (Sandbox Code Playgroud)
第二在页面模型定义上,告诉该模型使用您定义的表单类
from wagtail.wagtailcore.models import Page
class MyCustomPage(Page):
base_form_class = MyCustomPageForm
Run Code Online (Sandbox Code Playgroud)
WagtailAdminPageForm。__init__函数,该函数在创建表单时调用。__init__initial数据kwargs__init__idparent_page实例及其中的任何字段__init__添加自定义初始数据后,我们使用更改后的 kwargs调用 super| 归档时间: |
|
| 查看次数: |
2991 次 |
| 最近记录: |