Wagtail ModelAdmin 只读

Posted

技术标签:

【中文标题】Wagtail ModelAdmin 只读【英文标题】:Wagtail ModelAdmin read only 【发布时间】:2017-08-06 20:22:52 【问题描述】:

使用 Wagtails 模型管理员:

有什么方法可以禁用编辑和删除选项,只留下检查视图?

我能想到的一种可能的方法是扩展模板,删除编辑和删除按钮,然后以某种方式禁用编辑和删除视图。

有没有更清洁的方法?


编辑:感谢 Loic 的回答,我可以弄清楚。

PermissionHelpersource code 也非常有助于找出正确的覆盖方法。

仅显示检查视图的完整答案

class ValidationPermissionHelper(PermissionHelper):
    def user_can_list(self, user):
        return True  
    def user_can_create(self, user):
        return False
    def user_can_edit_obj(self, user, obj):
        return False
    def user_can_delete_obj(self, user, obj):
        return False

class ValidationAdmin(ModelAdmin):
    model = Validation
    permission_helper_class = ValidationPermissionHelper
    inspect_view_enabled = True
    [...]

【问题讨论】:

感谢你们两位的解决方案,很遗憾,检查视图破坏了漂亮的 wagtail 面板,如果有可能禁用所有字段,而不是将它们分解为文本,那就太好了。无论如何谢谢你。 【参考方案1】:

遗憾的是,您需要该模型(在角色中设置)的 addchangedelete 权限中的 at least one 才能显示。

解决方法是向您的ModelAdmin 提供custom permission helper class 并始终允许列出(并且仍然允许在角色中设置添加/更改/删除):

class MyPermissionHelper(wagtail.contrib.modeladmin.helpers.PermissionHelper):
    def user_can_list(self, user):
        return True  # Or any logic related to the user.

class MyModelAdmin(wagtail.contrib.modeladmin.options.ModelAdmin):
    model = MyModel
    permission_helper_class = MyPermissionHelper

modeladmin_register(wagtail.contrib.modeladmin.options.MyModelAdmin)

【讨论】:

谢谢!我还必须扩展 user_can_create, user_can_edit_obj, user_can_delete_obj 才能仅实现检查视图。我已经用完整的答案编辑了这个问题。 是的,我最初在答案中包含了这些方法,但删除了它们,因此可以在角色中相应地设置它们,而不是强制添加/编辑/删除始终为False。这样做的“缺点”是管理员无论如何都可以访问,但这允许定义具有不同控制级别的多个角色。但你是对的,你的问题是关于“无条件”使其只读,我应该包括它们。

以上是关于Wagtail ModelAdmin 只读的主要内容,如果未能解决你的问题,请参考以下文章

只读表单字段格式

只读模型并在django admin中显示为列表?

永远不会调用Django管理界面中的字段的只读方法

允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE

Wagtail:如何在管理员中设置计算字段(@property)标题

项目一:CRM(客户关系管理系统)--10