在Django Admin中如何禁用删除链接

Pet*_*son 65 django django-admin

我已设法禁用"删除已选中"操作.简单.

但是用户仍然可以点击某个项目,然后底部有红色的删除链接.

小智 114

简单:)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        return False
Run Code Online (Sandbox Code Playgroud)

  • 该操作仍然在下拉列表中,但会抛出一个禁止的403.要清理它,你必须遵循我的解决方案.另外这样做也是如此. (9认同)

rad*_*tek 82

如果要禁用非自定义的特定操作,请执行此操作.在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
Run Code Online (Sandbox Code Playgroud)

不包含它actions = ['your_custom_action'],仅适用于您为该模型定义的自定义操作(defs).该解决方案AdminSite.disable_action('delete_selected')为所有模型禁用它,因此您必须在每个modelAdmin后明确包含它们

  • 我不明白为什么返回has_delete_permission,因为false不会删除该操作.我必须在django 1.6.6中做两件事 (2认同)
  • 你可以使用`actions = None`而不是`get_actions()`. (2认同)
  • “ has_delete_permission”似乎足以让我到处禁用删除功能。`del actions ['delete_selected']`引发键错误。谢谢 :) (2认同)

Aid*_*tis 11

只需禁用该yourapp.delete_yourmodel用户或其所属组的权限即可.


Yuv*_*dam 9

那么你可能正在使用:

AdminSite.disable_action('delete_selected')
Run Code Online (Sandbox Code Playgroud)

要进一步控制,只需实现自己的管理员并将其操作设置为您需要的任何内容:

class MyModelAdmin(admin.ModelAdmin):
    actions = ['whatever', 'actions']
Run Code Online (Sandbox Code Playgroud)

参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action

  • 不行.不影响单个页面.只需在浏览列表时禁用操作即可. (5认同)

dev*_*snd 5

这里的解决方案已经很好了,但我更喜欢将其作为可重用的 mixin,如下所示:

class NoDeleteAdminMixin:
    def has_delete_permission(self, request, obj=None):
        return False
Run Code Online (Sandbox Code Playgroud)

您可以在您想要防止删除的所有管理员中使用此功能,如下所示:

class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
    ...
Run Code Online (Sandbox Code Playgroud)