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)
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后明确包含它们
那么你可能正在使用:
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
这里的解决方案已经很好了,但我更喜欢将其作为可重用的 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)
归档时间: |
|
查看次数: |
29193 次 |
最近记录: |