以编程方式更新Wagtail中的编辑界面

时间:2016-04-14 19:13:43

标签: python django wagtail

我正在开发一个Django Wagtail项目,我有时会在'after_edit_page'中更改页面数据。钩。我所做的是为ForeignKey关系设置一个值,其中该对象是一个Snippet。当我更新页面字段时,我可以在实时页面中正确地看到这些更改,因此可以正确保存模型。但是当我进入编辑界面时,我无法在SnippetChooserPanel中看到相同的变化,它仍然是空的。

由于这对页面编辑非常困惑,我想知道如何以编程方式更新管理员中的编辑器面板?

1 个答案:

答案 0 :(得分:2)

这是因为编辑页面后页面的草稿会保存到wagtailcore.PageRevision表中。当您返回编辑页面时,此草稿将用于填充管理表单。草稿保存在&after-page_edit'之后。信号被触发,因此对Page的任何修改都不会包含在PageRevision中,因此下次加载管理界面时不会出现。

相反,您可以使用(当前未记录的,抱歉)功能覆盖用于页面模型的表单:

from wagtail.wagtailadmin.forms import WagtailAdminPageForm
from wagtail.wagtailcore.models import Page

class MyPageForm(WagtailAdminPageForm):
    def clean(self):
        cleaned_data = super(MyPageForm, self).clean()
        # Set the snippet to a new value
        cleaned_data['snippet'] = MySnippet.objects.get()
        return cleaned_data

class MyPage(Page):
    # Your fields, etc here...

    base_form_class = MyPageForm

此功能确实需要最近的(1.4.3+)Wagtail版本才能工作。