如何在Wagtail Page模型中访问请求对象?

时间:2018-02-08 13:42:27

标签: python django django-models wagtail

我想动态地将字段的默认值设置为当前登录的用户:

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,
    }

还有什么想法?

基本上登录管理员的任何人都应该成为作者的默认设置。

1 个答案:

答案 0 :(得分:0)

我参与其中,但我不确定如何获取Wagtail edit_handler系统生成的管理表单的请求上下文。

概述

  • Wagtail允许您set a custom form在其管理员中使用,我们通过向页面模型添加base_form_class来执行此操作,该模型将引用扩展WagtailAdminPageForm的新类。
  • 然后我们provide initial valuesinitial对象传递给超级班级__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