在我的模型中,我有Document
模型,并带有Library
模型的外键。
当我在Django管理网站中时,我想在创建新的Library
时禁用编辑和删除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
的可能性,这不是我想要的。有没有办法仅在模型编辑表单中禁用这些操作?
答案 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)