Django Admin- 禁用特定模型的编辑和“保存”按钮
我有一个Django模型,我希望它只能是只读的,不允许添加或编辑。
我已经把所有字段设置为只读,并在ModelAdmin中重写了has_add_permission,代码如下:
class SomeModelAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
有没有类似的has_edit_permission
?可以禁用它来去掉“保存”和“保存并继续”这两个按钮?然后换成一个简单的“关闭并返回”按钮。
Django文档 只提到了只读字段,而没有提到如何重写编辑权限。
11 个回答
20
最简单的方法就是在ModelAdmin类中禁用相应的权限。比如,我有一个购物车模型,我希望管理员只能查看(列表和详情),所以我只需要在CartAdmin类中添加以下几个函数,就可以禁用删除、修改和添加的功能。
class CartAdmin(admin.ModelAdmin):
list_display = ['listing']
def has_add_permission(self, request, obj=None):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
这三个方法:has_add_permission、has_change_permission和has_delete_permission,就是用来禁用管理员界面中的添加按钮、添加表单、编辑表单和删除按钮的。
下面是当在管理员界面查看某个记录的详情时,禁用以上权限后的样子。
从上面的图可以看到,界面上只有一个关闭按钮,详情信息并没有以表单的形式显示出来。
31
对于Django 1.11版本:
def has_add_permission(self, request, obj=None):
return False
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_save_and_continue'] = False
extra_context['show_save'] = False
return super(YourModelAdmin, self).changeform_view(request, object_id, extra_context=extra_context)
14
你可以修改 templates/admin/submit_line.html
这个模板,来改变按钮的样式,随便你想要什么样的按钮都可以。如果你只想为某个特定的模型做这个修改,可以把文件放在 templates/admin/[app_label]/[model]/submit_line.html
这个位置。
如果你想根据条件来决定是显示默认的提交行还是你自己定制的提交行,可以重写 ModelAdmin.change_view
方法,并在 extra_context
中添加一个布尔值:
class MyModelAdmin(admin.ModelAdmin):
...
def change_view(self, request, object_id, extra_context=None):
if not request.user.is_superuser:
extra_context = extra_context or {}
extra_context['readonly'] = True
return super(MyModelAdmin, self).change_view(request, object_id, extra_context=extra_context)