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
我想在 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