django - 是否可以在 wagtail 中动态设置 edit_handlers?
问题描述
在 Wagtail (2.1) 中,我想显示edit_handlers
基于instance
Page 对象的 。在 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
视图。
用例子更新
例如,我希望能够编辑 Storypage 的标签,以防登录用户名等于“tagman”。如果没有,那么我应该无法编辑标签。
默认使用 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
。
解决方案
无需覆盖edit
视图。页面实例可作为self.instance
. 从 Wagtail 2.1 开始,请求可以作为self.request
.
推荐阅读
- pyside - 选择 QGraphicsPathItem 不正确
- r - RSQLite odbc dbDataType 日期格式不同
- java - 如何从java源代码解析内部类
- msbuild - 给定两个 msbuild 日志事件 X 和 Y,其中 X.Timestamp < Y.Timestamp 事件 X 是否在事件 Y 之前开始运行?
- javascript - Javascript正则表达式:大写比例
- r - R 表达式中总和的项
- javascript - 页面加载后如何在表单操作上触发 Jquery 事件
- java - 动态加载 GridPane 时显示 ProgressBar
- android - 为什么挂起的意图会失去我的附加功能(Firebase 通知)?
- pandas - 查询包含列表的列