Wagtail ModelAdmin 只读模式

9
使用Wagtail的Modeladmin:
有没有办法禁用编辑和删除选项,只保留查看视图?
我能想到的一个可能的方法是扩展模板,删除编辑和删除按钮,然后以某种方式禁用编辑和删除视图。
有更简洁的方法吗?

编辑:感谢Loic的回答,我得以理解。

PermissionHelper 源代码也非常有帮助,可以找出正确的重写方法。

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

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
    [...]

1
感谢你们两位提供的解决方案,唯一的遗憾是检查视图会破坏美观的Wagtail面板。如果有禁用所有字段而不是将它们转换为文本的可能性,那就太好了。无论如何,还是非常感谢。 - TomRavn
1个回答

9

很遗憾,您需要在该模型上拥有addchangedelete权限(在角色中设置)至少其中一个才能显示。

解决方法是为您的ModelAdmin提供一个自定义权限助手类,始终允许列出(并仍然允许在角色中设置添加/更改/删除):

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 以实现仅查看检查视图。我已编辑问题并附上完整的答案。 - Cristián
1
是的,我最初在答案中包含了那些方法,但是后来将它们删除了,这样可以根据角色设置相应的添加/编辑/删除权限,而不是强制将其始终设置为“False”。这样做的“缺点”是管理员仍然可以访问,但是这允许定义具有不同控制级别的多个角色。 但是你说得对,你的问题是关于“无条件”使其只读,我应该把它们包括在内。 - Loïc Teixeira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接