基本

Django管理画面入門|admin.pyの設定と使い方

Django 管理画面 admin.py

Django管理画面入門
admin.pyの設定と使い方

Djangoのadmin.pyを使った管理画面の設定方法、モデルの登録、カスタマイズ方法を解説します。

こんな人向けの記事です

  • Django管理画面にモデルを表示したい人
  • 管理画面の表示をカスタマイズしたい人
  • インライン編集の設定方法を知りたい人

Step 1admin.pyの役割

admin.pyは、Django管理画面で表示するモデル(テーブル)の設定を行うファイルです。モデルを登録することで、ブラウザからデータの追加・編集・削除ができるようになります。

管理画面は開発時のデータ確認やマスタデータの管理に非常に便利な機能です。コードを書かずにCRUD操作ができるため、開発効率が大幅に向上します。

Step 2モデルの登録

admin.site.register()でモデルを登録します。

admin.py
from django.contrib import admin
from .models import Company, Employee

admin.site.register(Company)
admin.site.register(Employee)

上記の例では、models.pyに定義したCompanyEmployeeを管理画面に表示させています。登録後、管理画面にモデル名が一覧表示されます。

注意: アクセスには事前にpython manage.py createsuperuserで管理者ユーザーを作成しておく必要があります。また、settings.pyのINSTALLED_APPSにアプリケーションが登録されていないとモデルが表示されません。

Step 3管理画面での操作

管理画面はhttp://127.0.0.1:8000/admin/からアクセスできます。モデルを登録すると、以下の操作がブラウザから行えます。

操作説明
一覧表示登録されたデータの一覧を確認できる
追加フォームから新しいデータを追加できる
編集既存データのフィールドを変更できる
削除データを選択して削除できる(確認画面あり)
検索設定したフィールドで検索できる
フィルタ設定したフィールドでフィルタリングできる

Step 4ModelAdminによるカスタマイズ

ModelAdminクラスを使って管理画面の表示を細かくカスタマイズできます。

admin.py
from django.contrib import admin
from .models import Employee

class EmployeeAdmin(admin.ModelAdmin):
    list_display = ("name", "age", "company")  # 一覧に表示するフィールド
    list_filter = ("company",)                 # サイドバーのフィルタ
    search_fields = ("name",)                  # 検索対象フィールド
    list_per_page = 20                         # 1ページの表示件数
    ordering = ("name",)                       # デフォルトの並び順

admin.site.register(Employee, EmployeeAdmin)

デコレータを使った書き方もあります。

admin.py
@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
    list_display = ("name", "age", "company")
    list_filter = ("company",)
    search_fields = ("name",)

ポイント: @admin.register()デコレータを使うと、admin.site.register()を別途呼び出す必要がなくなります。どちらの書き方でも動作は同じです。

Step 5主なModelAdminオプション

ModelAdminで設定できる主なオプションの一覧です。

オプション説明
list_display一覧画面に表示するフィールド("name", "age")
list_filterフィルタを表示するフィールド("company",)
search_fields検索対象のフィールド("name", "email")
list_per_page1ページの表示件数20
orderingデフォルトの並び順("-created_at",)
readonly_fields読み取り専用にするフィールド("created_at",)
list_editable一覧画面で直接編集可能にする("age",)
fields編集画面に表示するフィールド("name", "age")

Step 6インラインモデル表示

関連するモデルを同じページで編集できるようにインライン表示を設定できます。例えば、会社の編集画面で社員も同時に編集できるようになります。

admin.py
from django.contrib import admin
from .models import Company, Employee

class EmployeeInline(admin.TabularInline):
    model = Employee
    extra = 1  # 追加用の空フォーム数

@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
    list_display = ("name", "founding_date")
    inlines = [EmployeeInline]

@admin.register(Employee)
class EmployeeAdmin(admin.ModelAdmin):
    list_display = ("name", "age", "company")
インラインクラス表示形式適した場面
TabularInline横並びのテーブル形式フィールドが少ない場合
StackedInline縦並びのフォーム形式フィールドが多い場合

ポイント: extraを0に設定すると、新規追加用の空フォームが表示されなくなります。既存データの編集のみを行いたい場合に設定してください。追加ボタンは別途表示されます。

まとめ

  • admin.site.register()でモデルを管理画面に登録する
  • ModelAdminクラスで一覧表示、フィルタ、検索などをカスタマイズする
  • list_display, list_filter, search_fieldsは特に使用頻度が高い
  • @admin.register()デコレータで簡潔に記述できる
  • TabularInline/StackedInlineで関連モデルをインライン編集できる