2012-03-05 92 views
2

我有一个应用程序,我正在使用django admin,但我的应用程序不允许删除数据,并且django admin拥有delete按钮/链接。我已经删除了delete action删除django中的按钮/链接admin

我的问题是,我如何删除delete按钮/链接在Django的管理页面?

回答

7

请勿删除或更改管理员中的任何内容。

取而代之,删除用户/组的权限以删除给定的模型。如果用户没有删除权限,则删除按钮不会出现在与该模型相关的任何页面上。

8
class MyAdmin(ModelAdmin): 

    def get_actions(self, request): 
     actions = super(MyAdmin, self).get_actions(request) 
     if 'delete_selected' in actions: 
      del actions['delete_selected'] 
     return actions 

    def has_delete_permission(self, request, obj=None): 
     return False 

如果没有给出删除权限,单个对象的“删除”按钮将消失。更改列表“操作”(应用于选中复选框的选择列表)仍将显示,因为您可能有权删除某些对象。您可以使用上面的代码删除两者。

CLARIFICATION(对于downvoters):admin检查当前用户是否有权删除,然后相应地显示/隐藏按钮。你写道“我的应用程序不允许删除”,所以我认为你拿走了权限。超级用户不会查看权限,超级用户总是返回“是的,我拥有该权限”。如果你想让按钮消失的超级用户,你必须使用我的上述代码。对于其他用户,只需按照Secator的回答拿走权限即可。

+0

我认为澄清提供了这个用例;尽管他们的所有荣耀都是最佳做法(没有讽刺意图),但我的许多客户最终都会获得完全的超级用户访问权限,所以在一些实际情况下,这是阻止人们破坏事物的最佳方式。 – kungphu 2012-11-08 04:39:34

+0

很好的答案,谢谢 – 2013-02-27 02:59:33

+0

也有些情况下,您可能正在运行一个应用程序,但您没有编写该应用程序,并且需要编码才能要求用户成为超级用户,在这种情况下,最佳做法建议对您不利。 – 2014-09-17 15:29:58