从模型创建表单中的相关模型字段中删除“删除所选模型”按钮(Django管理员)

时间:2018-07-25 09:09:09

标签: python django django-admin-actions

在我的模型中,我有Document模型,并带有Library模型的外键。 当我在Django管理网站中时,我想在创建新的Library时禁用编辑和删除Document实例。

Admin site, view for adding new Document

我试图通过将django.contrib.admin.ModelAdmin子类化并删除更改/删除权限来删除删除和编辑权限

@admin.register(Library)
class LibraryAdmin(admin.ModelAdmin):
    def has_delete_permission(self, request, obj=None):
        return False

    def has_change_permission(self, request, obj=None):
        return False

这使不需要的按钮消失,但也完全阻止了编辑和删除Libraries的可能性,这不是我想要的。有没有办法仅在模型编辑表单中禁用这些操作?

1 个答案:

答案 0 :(得分:1)

您可以在文档admin中标记该请求:

def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
    request._editing_document = object_id is not None  # add attribute
    return super(DocumentAdmin, self).changeform_view(request, object_id=object_id, form_url=form_url, extra_context=extra_context)

现在您可以在相关管理员中访问该标志:

@admin.register(Library)
class LibraryAdmin(admin.ModelAdmin):
    def has_delete_permission(self, request, obj=None):
        if getattr(request, '_editing_document', False):  # query attribute
            return False
        return super(LibraryAdmin, self).has_delete_permission(request, obj=obj)