Django
の管理サイトで同じモデルを別々の管理画面として管理したいことがあり、同じモデルを2回管理サイトに追加する方法がないか調べてみました。
ユーザアカウントのモデルを権限ごとに参照する管理画面を分けたい場合などに使える実装方法だと思います。
前提条件
- Python : 3.6.2
- Django : 3.0.5
こちらのソースをベースに実装していきたいと思います。
GitHub - koichi-ezato/sample
Contribute to koichi-ezato/sample development by creating an...
まずは単純に同じモデルを2回実装してみる
まずはシンプルに同じモデルを2つ実装してみました。
@admin.register(User)
class UserAdminSimple(admin.ModelAdmin):
pass
@admin.register(User)
class UserAdmin(ExportMixin, admin.ModelAdmin):
...
この状態で「 python manage.py runserver
」を実行すると下記のエラーが発生します。
django.contrib.admin.sites.AlreadyRegistered: The model User is already registered with 'accounts.UserAdminSimple'.
モデルは既に登録されていると言われてしまい追加できませんでした。
モデルの Meta クラスの proxy オプションを使用する
Model
の Meta
クラスの proxy
オプションを True
に設定することで一つのモデルから複数の管理画面を作成することができます。
実装手順を説明していきます。「 accounts/models.py
」にプロキシモデルを実装します。
class UserProxy(User):
class Meta:
proxy = True
「 accounts/admin.py
」の UserAdminSimple
に UserProxy
を設定します。
@admin.register(UserProxy)
class UserAdminSimple(admin.ModelAdmin):
pass
この状態で「 python manage.py runserver
」を実行して画面を確認してみます。
ユーザモデルの管理画面を2つ追加することができました!!
最後に
管理サイトに同じモデルを2回追加する方法を説明してみました。それぞれのモデルの管理画面で一覧に表示したいものを変えたり、一覧の抽出条件を変えたい場合に役に立ちそうなので、実装方法を忘れないようにしておきたいですね。
コメント