【发布时间】:2011-05-01 22:13:27
【问题描述】:
我已成功禁用“删除所选”操作。简单。
但是用户仍然可以点击一个项目,然后在底部有红色的删除链接。
【问题讨论】:
标签: django django-admin
我已成功禁用“删除所选”操作。简单。
但是用户仍然可以点击一个项目,然后在底部有红色的删除链接。
【问题讨论】:
标签: django django-admin
简单:)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
【讨论】:
如果您想禁用非自定义的特定功能,请执行此操作。在 django 1.6.6 中,我必须扩展 get_actions 并定义 has_delete_permission。 has_delete_permission 解决方案并没有摆脱下拉菜单中的操作:
class MyModelAdmin(admin.ModelAdmin):
....
def get_actions(self, request):
#Disable delete
actions = super(MyModelAdmin, self).get_actions(request)
del actions['delete_selected']
return actions
def has_delete_permission(self, request, obj=None):
#Disable delete
return False
不包括在 actions = ['your_custom_action'] 中,仅适用于您为该模型定义的自定义操作 (defs)。解决方案 AdminSite.disable_action('delete_selected') 为所有模型禁用它,因此您必须稍后在每个模型管理员中明确包含它们
【讨论】:
actions = None代替get_actions()。
has_delete_permission 似乎足以让我在任何地方禁用删除。 del actions['delete_selected'] 引发关键错误。谢谢:)
只需禁用该用户或他所属的组的yourapp.delete_yourmodel 权限。
【讨论】:
你可能正在使用:
AdminSite.disable_action('delete_selected')
为了进一步控制,只需实现您自己的管理员并将其操作设置为您需要的任何内容:
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
【讨论】:
admin.site.disable_action('delete_selected')
来自docs
【讨论】:
这里的解决方案已经很好了,但我更喜欢将它作为可重用的 mixin,如下所示:
class NoDeleteAdminMixin:
def has_delete_permission(self, request, obj=None):
return False
您可以在所有要防止删除的管理员中使用它,如下所示:
class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
...
【讨论】:
这是非常古老的,但它仍然可以帮助某人。
假设 OP 的
...用户仍然可以点击一个项目,然后底部有红色的删除链接。
指的是“更改”视图中的红色按钮。这个按钮可以通过扩展ModelAdmin.change_view方法来移除,如下:
def change_view(self, request, object_id=None, form_url='', extra_context=None):
return super().change_view(request, object_id, form_url,
extra_context=dict(show_delete=False))
您可以对show_save 和show_save_and_continue 执行相同的操作。更多信息和替代方案here。
另请注意,从 2.1 版开始,Django 有一个单独的 has_view_permission (docs),这可能是更好的选择,具体取决于您的用例。
【讨论】: