【发布时间】:2020-05-10 15:42:09
【问题描述】:
背景:我想在管理页面视图期间使用一些与管理请求相关的信息(通常是一些预填充)来增强页面实例。基本上我需要一些像“get_queryset”这样的函数,但不是用于列表视图,只是用于编辑视图。
在与类似问题相关的较早问题中:Wagtail - how to preopulate fields in admin form? 向我提供了使用名为
的东西的说明创建页面视图
但是,我无法导入它。此外,如果我搜索,我什至在谷歌中找不到任何提及:
鹡鸰+CreatePageView
我找到的最接近的东西是https://docs.wagtail.io/en/v2.1.1/reference/contrib/modeladmin/create_edit_delete_views.html,但该页面还指出:
注意:modeladmin 仅提供“create”、“edit”和“delete” 非页面类型模型的功能(即不扩展的模型 wagtailcore.models.Page)。如果您的模型是“页面类型”模型, 自定义以下任何一项都不会产生任何影响
我很困惑。如果我需要为 Page 模型扩展自定义管理视图,我应该怎么做?
我研究了 Model.admin 和 Page 的 wagtail 源代码,但没有找到任何方法。有什么想法吗?
相关代码简化:
鹡鸰钩:
class ItemAdmin(ModelAdmin):
pass
# some function override here maybe?
型号:
class ItemPage(Page):
pass
# override for a function that gives data to the admin view maybe here?
编辑
按照 cmets 的建议,可以在创建过程中修改管理页面表单:
from wagtail.admin.forms import WagtailAdminPageForm
class ItemPageForm(WagtailAdminPageForm):
def __init__(self, data=None, files=None, parent_page=None, *args, **kwargs):
super().__init__(data, files, *args, **kwargs)
class ItemPage(Page):
base_form_class = ItemPageForm
但是,在 WagtailAdminPageForm 构造函数中获取“请求”似乎是不可能的。
【问题讨论】:
-
你能举一个你想要覆盖的例子吗?从您所问的内容看来,您想更改外键选择的查询集?
-
@IainShelvington 我的问题是关于在管理员中向用户显示页面时我应该覆盖什么来修改页面。
-
ModelAdmin 可能不是您想要的,它可能有点令人困惑,因为 ModelAdmin 确实提供了一种管理/编辑页面的方法,但它不是主要方式。 docs.wagtail.io/en/stable/advanced_topics/customisation/… 可能是您需要的?
-
@LBBenJohnston 好主意,感谢您的努力。我以前不知道这个选项。但是,这还不够 - 我修改了我的问题以反映您的想法。