我想预先在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中实现这一目标?
答案 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