django Wagtail -如何preopulate领域的管理形式?

6qfn3psc  于 2023-05-08  发布在  Go
关注(0)|答案(2)|浏览(201)

我想在wagtail页面管理预填充字段。特别是我想采取当前登录的管理员/编辑器用户的用户名,并填写在表单中作为一个字符串。我的页面的简化版本看起来像这样:

class ItemPage(Page):

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

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

我不想在模型的作者字段中设置默认值-它应该是用户特定的。
我不想在保存/更改模型后使用save方法或信号。用户应该看到那里有什么,并且应该有能力改变它。此外,页面将自动生成,无需管理界面。
我想我需要像https://stackoverflow.com/a/14322706/3960850这样的东西,但不是在Django中,而是在Wagtail ModelAdmin中。
如何在Wagtail中实现这一点?

hc2pp10m

hc2pp10m1#

下面是一个基于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())

您也可以通过覆盖models 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
agxfikkp

agxfikkp2#

我想做一些类似的事情,并发现了如何做到这一点。

任务有一个博客(使用Wagtail构建)允许多个文章作者。文章页面还暴露了写文章的作者的详细信息(个人资料图片,工作,作者的介绍)。
解决方案因此,使用应添加的字段扩展默认用户模型

https://docs.wagtail.org/en/stable/advanced_topics/customisation/custom_user_models.html
并访问模板中的用户(通过所有者)。
https://docs.wagtail.org/en/stable/reference/pages/model_reference.html#wagtail.models.Page.owner

相关问题