我已经设法禁用了“删除选定项”操作。简单。但是用户仍然可以点击一个项目,然后在底部有一个红色的删除链接。
hwazgwia1#
简单:)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin): # Other stuff here def has_delete_permission(self, request, obj=None): return False
5ktev3wc2#
如果你想禁用一个非自定义的操作,可以这样做。在django 1.6.6中,我必须扩展get_actions并定义has_delete_permission。has_delete_permission解决方案并没有为我从下拉列表中去掉这个操作:
get_actions
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 = ['your_custom_action']
AdminSite.disable_action('delete_selected')
vsmadaxz3#
只需禁用该用户或其所属组的yourapp.delete_yourmodel权限。
yourapp.delete_yourmodel
a7qyws3x4#
您可能正在使用:
要进一步控制,只需实现您自己的管理员,并根据需要设置其操作:
class MyModelAdmin(admin.ModelAdmin): actions = ['whatever', 'actions']
参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
ni65a41a5#
这里的解决方案已经很不错了,但是我更喜欢把它作为一个可重用的mixin,就像这样:
class NoDeleteAdminMixin: def has_delete_permission(self, request, obj=None): return False
你可以在你的所有管理员中使用它来防止删除,如下所示:
class MyAdmin(NoDeleteAdminMixin, ModelAdmin): ...
jhiyze9q6#
admin.site.disable_action('delete_selected')从文档中
admin.site.disable_action('delete_selected')
0ve6wy6x7#
这是非常古老的,但仍然,它可能会帮助一些人。假设OP...用户仍然可以单击某个项目,然后在底部显示红色的“删除”链接。是“change”视图中的红色按钮,可以通过扩展ModelAdmin.change_view方法删除该按钮,如下所示:
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),这可能是一个更好的选择,取决于您的用例。
show_save
show_save_and_continue
has_view_permission
7条答案
按热度按时间hwazgwia1#
简单:)
5ktev3wc2#
如果你想禁用一个非自定义的操作,可以这样做。在django 1.6.6中,我必须扩展
get_actions
并定义has_delete_permission
。has_delete_permission
解决方案并没有为我从下拉列表中去掉这个操作:如果不将其包含在
actions = ['your_custom_action']
中,则只对您为该模型定义的自定义操作(def)有效。解决方案AdminSite.disable_action('delete_selected')
对所有模型都禁用了它,因此您必须在以后根据每个模型显式地包含它们管理vsmadaxz3#
只需禁用该用户或其所属组的
yourapp.delete_yourmodel
权限。a7qyws3x4#
您可能正在使用:
要进一步控制,只需实现您自己的管理员,并根据需要设置其操作:
参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
ni65a41a5#
这里的解决方案已经很不错了,但是我更喜欢把它作为一个可重用的mixin,就像这样:
你可以在你的所有管理员中使用它来防止删除,如下所示:
jhiyze9q6#
admin.site.disable_action('delete_selected')
从文档中
0ve6wy6x7#
这是非常古老的,但仍然,它可能会帮助一些人。
假设OP
...用户仍然可以单击某个项目,然后在底部显示红色的“删除”链接。
是“change”视图中的红色按钮,可以通过扩展
ModelAdmin.change_view
方法删除该按钮,如下所示:你可以用
show_save
和show_save_and_continue
做同样的事情。更多信息和替代here。还要注意,从2.1版本开始,Django有一个单独的
has_view_permission
(docs),这可能是一个更好的选择,取决于您的用例。