我设法禁用了“删除所选”操作。简单。
但是用户仍然可以单击某个项目,然后在底部有红色的“删除”链接。
Answers:
简单:)
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']
,仅适用于为该模型定义的自定义操作(def)。解决方案AdminSite.disable_action('delete_selected')
,对所有模型都禁用该解决方案,因此您稍后必须在每个模型中明确包括它们
actions = None
代替get_actions()
。
has_delete_permission
似乎足以让我到处禁用删除功能。del actions['delete_selected']
引发键错误。谢谢:)
好吧,您可能正在使用:
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
这已经很老了,但是仍然可以帮助某个人。
假设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
。更多信息和替代品在这里。
另请注意,从2.1版开始,Django有一个单独的has_view_permission
(docs),根据您的用例,这可能是一个更好的选择。