【Django初学者向け】ユーザークラスのAdminページを見やすく変更|UserAdminクラスについてわかりやすく解説します!

paintingDjango

(最終更新月:2021年12月)

「ユーザーモデルクラスのAdminページのレイアウトを変更したい!」

「ユーザーモデルクラスを変更したら、Adminページが正しく表示されない!」

というDjango初学者の方へ向けた記事となります

当記事を通じて、

  • ユーザーモデルクラスのAdminページを変更する方法

について解説していきます

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安のWebデザインスクールです。

>>デザナルに興味がある方はこちらからどうぞ<<

詳細をまとめた記事もございますので、ぜひご覧ください。

さいしょに

各モデルクラスのAdminページは下記の通り構成されています

  1. 登録情報の一覧ページ(CRUDの「R」)
  2. 新規登録ページ(CRUDの「C」)
  3. 編集ページ(CRUDの「U」)
  4. 削除ページ(CRUDの「D」)

このうち「削除ページ」は特に変更は不要ですが、その他のページは変更する必要があります

まずは現状を見てみましょう

【accounts > admin.py】

from django.contrib import admin
from .models import User

admin.site.register(User)

【一覧ページ】

「Eメールアドレス」フィールドだけでなく他のフィールドもあると便利です

【新規登録ページ】

  • 順番に違和感がある
  • パスワードが丸見え

など修正したい箇所が多数あります

【編集ページ】

順番、パスワードがやはり修正すべき点です

これらを改善していくためには、

  • UserAdminクラスを継承し、新たなクラスを作成
  • そのクラスを、admin.site.register(モデル名, 作成したクラス)で登録

する必要があります

順を追って進めていきましょう!

ユーザー一覧ページ

UserAdminを継承したクラスで、一覧表示をするには最低限4つの変数を指定しないとエラーがでてしまいます

  1. list_display
  2. list_filter
  3. filter_horizontal
  4. ordering

の4つをまずは設定し、クラスを登録、アクセスまで進んでみます

【accounts > admin.py】

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import User

class UserAdmin(BaseUserAdmin):
    list_display = (
        "email",
        "active",
        "staff",
        "admin",
    )
    list_filter = (
        "admin",
        "active",
    )
    ordering = ("email",)
    filter_horizontal = ()
    
admin.site.register(User, UserAdmin)

一覧ページが下記の通りとなり、それぞれが役割を担っています(※filter_horizontalは使用してません)

各変数にフィールドを追記したことで、先程より充実した一覧ページが完成しました!

ただし、このままだと検索バーを使用するとエラーとなりますので、下記も追記します

search_fields = ('email',)

検索が実行された際にどのフィールドを検索するかを指定することができます

以上で、ユーザー一覧ページについては完了です

新規登録ページに進みましょう

ユーザー登録ページ

現状このままでユーザー登録ページへ進むと

エラーとなりアクセスができません

add_fieldsets」変数を追記します

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2')}
        ),
    )

「fields」に登録に必要なフィールドを指定しましょう

再度アクセスしてみると、

無事完成です!

編集ページはいかがでしょうか?

ユーザー編集ページ

一覧ページでメールアドレスをクリックし、編集ページへ進むと、

またもやエラー発生です

編集ページについては、「fieldsets」変数を追記する必要があります

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('staff','admin',)}),
    )

アクセスしてみると、

こちらも無事完成です!

【コード紹介】コピペ可!

コード全体はこちらになります

コピペ等ご自由にどうぞ!

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import User

class UserAdmin(BaseUserAdmin):
    
    list_display = (
        "email",
        "active",
        "staff",
        "admin",
    )
    list_filter = (
        "admin",
        "active",
    )
    filter_horizontal = ()
    ordering = ("email",)
    search_fields = ('email',)

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('staff','admin',)}),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2')}
        ),
    )

admin.site.register(User, UserAdmin)

まとめ

ユーザーのAdminページを変更するには、

  • 新たなUserAdminクラスを作成し、
  • admin.site.register(ユーザーモデルクラス、新たなUserAdminクラス)

で登録する必要があります

また、UserAdminクラスを作成するには、既存の変数へ値を入れていく必要があります

色々といじってみると、思っているよりカンタンに変更できるので是非使ってみてください!

以上で、スーパーユーザーに関するページは完了です

次回は、一般ユーザーが登録、ログインなどをする際の仕組みを作っていきます

「django-allauth」パッケージの導入、基本について解説していきます

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました