我想动态地将字段的默认值设置为当前登录的用户:
class SimplePage(Page):
author = models.CharField(max_length=255, default=request.user)
我知道get_context
,但类属性不能调用实例方法。
def get_context(self, request, *args, **kwargs):
return {
PAGE_TEMPLATE_VAR: self,
'self': self,
'request': request,
}
还有什么想法?
基本上登录管理员的任何人都应该成为作者的默认设置。
答案 0 :(得分:0)
我参与其中,但我不确定如何获取Wagtail edit_handler
系统生成的管理表单的请求上下文。
base_form_class
来执行此操作,该模型将引用扩展WagtailAdminPageForm
的新类。initial
对象传递给超级班级__init__
。SimplePage
模型相关联,并且在获取默认值时,我们使用Django的内置身份验证/用户帮助程序。注意:使用Wagtail 2.0导入语法。
from django.conf import settings
from django.contrib.auth import get_user_model
from wagtail.wagtailadmin.forms import WagtailAdminPageForm
#... other imports you should already have
class SimplePageForm(WagtailAdminPageForm):
def __init__(self, *args, **kwargs):
auth_user_model = get_user_model()
default_user = auth_user_model.objects.get(username='admin')
initial = {
'title': 'Unhelpful default title for the sake of example',
'author_user': default_user
}
super().__init__(initial=initial, *args, **kwargs)
class SimplePage(Page):
author_user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT
)
content_panels = Page.content_panels + [FieldPanel('author_user')]
base_form_class = SimplePageForm