1. ホーム
  2. python

[解決済み] Django Admin - 特定のモデルに対して 'Add' アクションを無効にする

2022-04-20 04:20:37

質問

私はたくさんのモデルとフォームを持つdjangoのサイトを持っています。多くのカスタムフォーム、フォームセット、インラインフォームセット、カスタムバリデーション、カスタムクエリセットを持っています。したがって、モデルの追加アクションは、他のものを必要とするフォームに依存し、django admin の 'add model' は、カスタムクエリーセットから 500 を介しています。

特定のモデルに対して 'Add $MODEL' 機能を無効化する方法はありますか?

私は /admin/appname/modelname/add/ は404(または適切な'go away'エラーメッセージ)を与え、'Add $MODELNAME'ボタンは /admin/appname/modelname ビューを表示します。

Django admin は admin アクションを無効にする方法を提供します (http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions) しかし、このモデルのアクションは 'delete_selected' だけです。つまり、admin アクションは既存のモデルにのみ作用します。これを行うためのdjango的な方法はあるのでしょうか?

解決方法は?

簡単です、オーバーロードするだけです。 has_add_permission メソッドを Admin クラスはこのようになります。

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