【Django】admin.pyとは:管理サイトのカスタマイズ方法について

2022.06.08 /

【Django】admin.pyとは:管理サイトのカスタマイズ方法について

記事ではPythonのフレームワークDjangoにおける、admin.pyによる管理サイトカスタマイズ方法について解説していきます。

Django管理サイトはWebアプリケーションを作成したら初めから利用できる、Webアプリケーションの管理サイトです。

管理サイトを利用することでモデル(レコード)の追加や削除、編集が簡単にできるようになります。

本記事を通して管理サイトの利用方法やカスタマイズについて理解を深めていきましょう。

Django管理サイト

Django管理サイトとは

Django管理サイトとは、Djangoで作成したWebアプリケーションのデータを管理するためのサイトです。利用するのは主に管理者(Administrator)や開発者です。

管理サイトを通して、簡単にモデルに対応したテーブルのレコードを操作(CRUD:追加、削除、変更)することが可能です。

管理サイトはDjango組み込みアプリケーションの一つであり、DjangoでWebアプリケーションを構築した段階から利用することができます。

開発時だけでなく、本番運用しているときでもデータ操作などで頻繁に利用されます。

管理サイトからはデータ操作CRUDだけでなく、ユーザーのパスワード変更や、データ検索、ソート、フィルタなど様々な機能が備わっております。

設定ファイル(settings.py)

Django管理サイトは初めからDjangoに組み込まれているアプリケーションの一つです。

設定ファイルsettings.pyのINSTALLED_APPに、以下のようにデフォルトで組み込まれています。

INSTALLED_APPS = [
    'django.contrib.admin', # Django管理サイト
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

django.contrib.adminが管理サイトのことであり、この行を削除すると利用できなくなりますのでご注意ください。

Django管理サイトへの接続

URL設定:urls.py

管理サイトへ接続するためのルーティングは、プロジェクトフォルダ内のurls.pyに以下のように記述されています。

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
]

これより管理サイトへのURLは初期設定で「/admin/」となっていることがわかります。別のURLに変更したい場合は、ここの記述を変更してください。

スーパーユーザーsuperuserの作成

はじめて管理サイトにログインする方はまず最初にsuperuser(管理者のアカウント)を作成する必要があります。

以下コマンドを実行してsuperuserを作成します。

python manage.py createsuperuser

上記コマンドを実行したら、ユーザー名・パスワード・メールアドレスを入力します。ここで作成したsuperuserの情報は管理者以外が知ることがないようにしましょう。

注意

superuserはis_superuser属性の値がTrueのアカウントであり、すべての権限を持っています

管理サイトへのアクセス

ブラウザを起動し、urls.pyで設定したURLにアクセスします。開発サーバーであれば「http://127.0.0.1:8000/admin」です。

アクセスすると次の画面が表示しますので、作成したsuperuserのユーザー名とパスワードを入力してログインすることができます。

DjangoでのWEBサイト接続成功

ログインが成功すると管理サイトのトップページが開きます。

Django:管理サイト

ここから管理サイトに登録したモデルの操作(レコードのCRUD)が可能です。管理サイトへのモデル登録やカスタマイズについては次項より解説していきます。

もしsuperuserのログインパスワードを忘れてしまった場合は、Django shellからパスワードを変更しましょう。まずDjango shellを以下コマンドで起動します。

python manage.py shell

次に以下に示すコマンドでパスワードを再設定します。ここではパスワードをoffice54で再設定してみます。

>>>from django.contrib.auth.models import User
>>>users = User.objects.all()
>>>user = users[0]
>>>user.set_password('office54')
>>>user.save()

set_password()メソッドの引数にパスワードを指定することで、新たにパスワードを設定できます。

管理サイトへログインできるユーザー

管理サイトへログインできるユーザーはsuperuserだけではないです。is_staff属性とis_active属性がTrueであるユーザーもログインすることができます。

つまりスーパーユーザーとアクティブであるスタッフユーザーが管理サイトへログインできるということです。

スタッフユーザーなど各ユーザーについては以下記事をご参照ください。

スタッフユーザーによるモデルの追加・削除などの操作は、ユーザー毎の「パーミッション」によります。

Django管理サイトのカスタマイズ:admin.py

管理サイトをカスタマイズするには各アプリケーションフォルダに生成されているadmin.pyを編集します。

本項ではadmin.pyを編集して、管理サイトをカスタマイズしていきます。

モデルの登録

管理サイトにmodels.pyで作成したモデルを登録するには以下のようにadmin.pyを編集します。ここではモデルクラスBookingを登録します。

from django.contrib import admin
from .models import Booking

admin.site.register(Booking)

上記のようにdjango.contrib.admin.siteのregister()メソッドを利用し、引数に登録したいモデルクラスを指定することで管理サイトに登録されます。

Django:管理サイトにモデルを登録する

ModelAdminクラスを使ったカスタマイズ

admin.pyでdjango.contrib.admin.ModelAdminクラスを利用することで、管理サイトのモデル一覧画面や変更画面の表示をカスタマイズすることができます。

ModelAdminクラスを利用したカスタマイズ例を以下に記します。

from django.contrib import admin
from .models import Booking

class BookingModelAdmin(admin.ModelAdmin):
    list_display = ('status', 'bkg_no', 'flag','created_at')
    ordering = ('-created_at',)

admin.site.register(Booking, BookingModelAdmin)
Django:管理サイトのカスタマイズ

ModelAdminによるカスタマイズを行うために、ModelAdminを継承したクラスを定義します。ここではBookingModelAdminクラスを定義しました。

このクラス内でModelAdminに用意されているクラス変数やメソッドを利用して、管理サイトのカスタマイズを行っていきます。ここではクラス変数list_displayとorderingを使っています。

register()メソッドの第二引数にModelAdminを継承したクラスを指定することで、第一引数に指定したモデルに対してカスタマイズが適用されるようになります。

ModelAdminでは以下のようなクラス変数が用意されています。

クラス変数 説明
list_display モデル一覧画面で表示するフィールドを指定
ordering 初期表示時のモデル一覧画面でのソート順を指定
sortable_by ソート可能なフィールドを指定
search_fields 検索ボックスを表示し、そこでの検索対象を指定
list_filter フィルターを表示し、フィルターの対象を指定
fields モデル追加・変更画面で表示するフィールドの指定
exclude モデル追加・変更画面で表示しないフィールドの指定

クラス変数:list_display

クラス変数のlist_displayを使用することで、モデル一覧画面で表示するフィールドを指定できます。

from django.contrib import admin
from .models import Booking

class BookingModelAdmin(admin.ModelAdmin):
    list_display = ('status', 'bkg_no', 'flag','created_at')

admin.site.register(Booking, BookingModelAdmin)
Django:admin.pyでクラス変数list_displayを使用する

クラス変数:ordering

クラス変数のorderingを使用することで、初期表示時のモデル一覧画面でのソート順を指定できます。

from django.contrib import admin
from .models import Booking

class BookingModelAdmin(admin.ModelAdmin):
    list_display = ('status', 'bkg_no', 'flag','created_at')
    ordering = ('-created_at',)

admin.site.register(Booking, BookingModelAdmin)

クラス変数:search_fields

クラス変数のsearch_fieldsを使用することで、モデル一覧画面に検索ボックスを表示し、そこでの検索対象フィールドを指定できます。

from django.contrib import admin
from .models import Booking

class BookingModelAdmin(admin.ModelAdmin):
    list_display = ('status', 'bkg_no', 'flag','created_at')
    ordering = ('-created_at',)
search_fields = ('bkg_no',)

admin.site.register(Booking, BookingModelAdmin)
Django:admin.pyでクラス変数search_fields

クラス変数:list_filter

クラス変数のlist_filterを使用することで、モデル一覧画面にフィルターを表示し、フィルターの対象フィールドを指定できます。

from django.contrib import admin
from .models import Booking

class BookingModelAdmin(admin.ModelAdmin):
    list_display = ('status', 'bkg_no', 'flag','created_at')
    ordering = ('-created_at',)
    list_filter = ('status', 'flag')

admin.site.register(Booking, BookingModelAdmin)
Django:admin.pyでクラス変数list_filter

まとめ

本記事「【Django】admin.pyとは:管理サイトのカスタマイズ方法について」はいかがでしたか。

Django管理サイトはDjangoを利用する理由の一つになるくらい目玉の機能です。

使いこなせるようになって、Webアプリケーション管理をDjango管理サイトで簡単にできるようになりましょう。