Wagtail - 如何预填充管理表单中的字段?

Wagtail - how to preopulate fields in admin form?

我想在 wagtail 页面管理中预填充字段。特别是我想获取当前登录的 admin/editor 用户的用户名并将其作为字符串填写在表单中。我的页面的简化版本如下所示:

class ItemPage(Page):

    author = models.CharField(max_length=255, default="")

    content_panels = Page.content_panels + [
        FieldPanel('author'),
    ]

我不想在模型的作者字段中设置默认值 - 它应该是用户特定的。

模型为saved/altered后,我不想使用save方法或信号。用户应该看到那里有什么,并且应该有能力改变它。此外,页面将在没有管理界面的情况下自动生成。

我认为我需要类似 的东西,但不是在 Django 中,而是在 Wagtail ModelAdmin 中。

如何在 Wagtail 中实现这一点?

这是一个基于 gasmans 评论和他们链接的新代码附带的文档的示例:

from wagtail.admin.views.pages import CreatePageView, register_create_page_view
from myapp.models import ItemPage

class ItemPageCreateView(CreatePageView):
    def get_page_instance(self):
        page = super().get_page_instance()
        page.author = 'Some default value'
        return page

register_create_page_view(ItemPage, ItemPageCreateView.as_view())

您也可以通过重写模型 init 方法来做到这一点,但上面的方法要好得多

class ItemPage(Page):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        try:
            author = kwargs['owner'].username
        except (AttributeError, KeyError):
            pass
        else:
            self.author = author