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

时间:2019-06-06 15:32:16

标签: django wagtail

我想预先在Wagtail页面管理员中填充字段。特别是我想使用当前登录的管理员/编辑用户的用户名,并将其作为字符串填写在表单中。我的页面的简化版本如下所示:

class ItemPage(Page):

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

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

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

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

我认为我需要类似https://stackoverflow.com/a/14322706/3960850的东西,但不是在Django中,而是使用Wagtail ModelAdmin。

如何在Wa中实现这一目标?

1 个答案:

答案 0 :(得分:3)

这是一个基于加斯曼评论和他们所链接的新代码随附的文档的示例:

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