[Django]管理サイトに同じモデルを2回追加する方法

Django Logo プログラミング

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 オプションを使用する

ModelMeta クラスの proxy オプションを True に設定することで一つのモデルから複数の管理画面を作成することができます。
実装手順を説明していきます。「 accounts/models.py 」にプロキシモデルを実装します。

class UserProxy(User):
    class Meta:
        proxy = True

accounts/admin.py 」の UserAdminSimpleUserProxy を設定します。

@admin.register(UserProxy)
class UserAdminSimple(admin.ModelAdmin):
    pass

この状態で「 python manage.py runserver 」を実行して画面を確認してみます。

Django Model Twice 1

ユーザモデルの管理画面を2つ追加することができました!!

最後に

管理サイトに同じモデルを2回追加する方法を説明してみました。それぞれのモデルの管理画面で一覧に表示したいものを変えたり、一覧の抽出条件を変えたい場合に役に立ちそうなので、実装方法を忘れないようにしておきたいですね。

スポンサーリンク
スポンサーリンク
プログラミング
スポンサーリンク

コメント

タイトルとURLをコピーしました