python django教學 - Django Admin-禁用特定模型的“添加”操作




django設定 createsuperuser (4)

我有一個有很多模型和表單的Django站點。 我有許多自定義表單和表單集和內聯表單集以及自定義驗證和自定義查詢集。 因此,添加模型動作取決於需要其他事物的表單,並且django admin中的'添加模型'通過自定義查詢集中的500來添加。

無論如何,禁用某些模型的“添加$ MODEL”功能?

我想讓/admin/appname/modelname/add/給404(或適當的'走開'錯誤信息),我不希望'Add $ MODELNAME'按鈕在/admin/appname/modelname視圖上。

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


Answers

默認情況下,syncdb為每個模型創建3個安全權限:

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

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

但是,如果您創建了一個名為“General Access”的新用戶組 (例如),那麼您只能為所有模型分配CHANGE和DELETE權限。

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


這是一個太延遲的答案; 只要發布這個,就好像有人找到相同的解決方案。

在admin.py文件中,您可以執行以下操作:

class MyModelForm(forms.ModelForm):

class Meta:
    model = MyModel
    fields = '__all__'


class MyModelAdmin(admin.ModelAdmin):
    form = QuestionTrackAdminForm
    list_display = ['title', 'weight']
    readonly_fields = ['title', 'weight']

admin.site.register(MyModel, MyModelAdmin)

在這裡,“readonly_fields”會發揮魔力。 謝謝。


很簡單,只需在Admin類中重載has_add_permission方法就可以了:

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







python django django-admin