在Wagtail(2.1)中,我想基于Page对象的edit_handlers
显示instance
。
在Wagtail中,我发现edit_handlers
是基于类的函数,因此没有请求或实例对象可用。
这有可能吗?
据我所知,我只能通过重写基于函数的视图edit
(https://github.com/wagtail/wagtail/blob/master/wagtail/admin/views/pages.py#L311
)来复制整个函数,然后在此处更改edit_handler分配(https://github.com/wagtail/wagtail/blob/master/wagtail/admin/views/pages.py#L329)来实现此目的。基于latest_revision
。
然后,我必须创建一个新的urls.py
,以针对该特定页面类型在此覆盖的edit
视图中进行选择。
使用示例更新
作为一个例子,如果登录的用户名等于“ tagman”,我希望能够编辑一个Storypage的Tag。如果没有,那么我应该不能编辑标签。
默认情况下,使用content_panels,promote_panels和setting_panels。 但是,根据request.user,我想显示promote_panels_alternative(包括标签)。
class StoryPage(Page):
tags = ParentalManyToManyField('tags.Tag', blank=True, related_name='tags')
edit_handler = CustomEditHandler
promote_panels_alternative = Page.promote_panels + [FieldPanel('tags', widget=forms.CheckboxSelectMultiple), ]
class CustomEditHandler(TabbedInterface): ?
在这个CustomEditHandler类(我不确定该从哪个子类继承)中,我将覆盖一个方法(不确定是哪个方法),该方法默认情况下会创建标签https://github.com/wagtail/wagtail/blob/master/wagtail/admin/edit_handlers.py#L785
,然后基于instance
或request
可以使用TabbedInterface
代替StoryPage.promote_panels_alternative
来构建StoryPage.promote_panels
。
答案 0 :(得分:-1)
无需覆盖edit
视图。该页面实例可作为self.instance
使用。从Wagtail 2.1开始,该请求可以作为self.request
使用。