2010-11-10 88 views
99

我有一個包含大量模型和表單的django網站。我有許多自定義表單和表單集和內聯表單集以及自定義驗證和自定義查詢集。因此,添加模型動作取決於需要其他事物的表單,並且django admin中的'添加模型'通過自定義查詢集中的500來添加。Django Admin - 禁用特定模型的「添加」操作

有無論如何禁用某些模型的'添加$ MODEL'功能嗎?

我想要/admin/appname/modelname/add/給出404(或適當的'走開'錯誤消息),我不希望'添加$ MODELNAME'按鈕在/admin/appname/modelname視圖。

Django管理員提供了一種禁用管理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions),但此模型的唯一操作是「刪除所選'。即管理員行爲僅對現有模型起作用。有沒有一些Django風格的方式來做到這一點?

+0

僅供參考:django admin中的「操作」是在更改列表視圖中應用於列表中任何已檢查行的下拉列表。 – 2011-11-08 17:39:42

+1

相關(但不同)的問題:http://stackoverflow.com/questions/1721037/remove-add-another-in-django-admin-screen – user9876 2013-02-22 18:32:45

回答

248

這是很容易,只是超載has_add_permission方法在您的管理類,像這樣:

class MyAdmin(admin.ModelAdmin): 
    def has_add_permission(self, request): 
     return False 
+6

這不適合我。 「添加模型」按鈕仍顯示在模型的更改列表頁面上。 – Cerin 2012-07-19 17:27:14

+2

2016年仍然適用於Django 1.9。謝謝! – lsh 2016-04-06 15:16:28

+0

哪裏可以寫這段代碼? – user5319825 2016-09-13 19:34:27

5

默認情況下執行syncdb創建每個模型3的安全權限:

  1. 創建(又名添加)
  2. 更改
  3. 刪除

如果您以管理員身份登錄,您將獲得一切無論如何。

但是,如果你創建了一個名爲「常規訪問」新用戶組(例如)那麼你可以只分配更改和刪除權限,爲您的所有車型。

然後,任何作爲該組成員的登錄用戶將不具有「創建」權限,屏幕上不會顯示與其相關的任何內容。

相關問題