2010-10-28 67 views

回答

10

簡單地禁用該用戶或其所屬的組的yourapp.delete_yourmodel權限。

+0

這在Django 1.3及更早版本中不起作用,因爲這個問題https://code.djangoproject.com/ticket/8060 它在Django 1.4中修復。 – 2012-05-30 10:45:06

100

簡單:)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin): 
    # Other stuff here 
    def has_delete_permission(self, request, obj=None): 
     return False 
+8

該動作仍在下拉菜單中,但會拋出一個禁止的403.要清理它,您必須遵循我的解決方案。另外做這個。 – radtek 2014-09-12 16:56:34

+0

你是否也想刪除下拉列表,如果是這樣,請按照radtek的解決方案 – thevangelist 2014-09-24 09:33:01

+1

@radtek你是對的,這個動作仍然在下拉列表中,但是OP確實聲明他已經設法禁用刪除選擇的動作。所以這是必要的。 – McKay 2016-10-18 18:27:48

61

如果要禁用特定的一個不定製做到這一點。在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'],只適用於你已經爲模型定義的自定義操作(DEFS)。該解決方案AdminSite.disable_action('delete_selected'),禁用它適用於所有型號,所以你必須明確地包括他們以後每各的ModelAdmin

+1

我不明白爲什麼返回has_delete_permission爲false並沒有擺脫這個動作。我必須在django 1.6.6中做這兩件事 – radtek 2014-09-12 16:55:58

1

admin.site.disable_action('delete_selected')

docs

相關問題