Django管理画面入門
admin.pyの設定と使い方
Djangoのadmin.pyを使った管理画面の設定方法、モデルの登録、カスタマイズ方法を解説します。
こんな人向けの記事です
- Django管理画面にモデルを表示したい人
- 管理画面の表示をカスタマイズしたい人
- インライン編集の設定方法を知りたい人
Step 1admin.pyの役割
admin.pyは、Django管理画面で表示するモデル(テーブル)の設定を行うファイルです。モデルを登録することで、ブラウザからデータの追加・編集・削除ができるようになります。
管理画面は開発時のデータ確認やマスタデータの管理に非常に便利な機能です。コードを書かずにCRUD操作ができるため、開発効率が大幅に向上します。
Step 2モデルの登録
admin.site.register()でモデルを登録します。
from django.contrib import admin
from .models import Company, Employee
admin.site.register(Company)
admin.site.register(Employee)
上記の例では、models.pyに定義したCompanyとEmployeeを管理画面に表示させています。登録後、管理画面にモデル名が一覧表示されます。
注意: アクセスには事前にpython manage.py createsuperuserで管理者ユーザーを作成しておく必要があります。また、settings.pyのINSTALLED_APPSにアプリケーションが登録されていないとモデルが表示されません。
Step 3管理画面での操作
管理画面はhttp://127.0.0.1:8000/admin/からアクセスできます。モデルを登録すると、以下の操作がブラウザから行えます。
| 操作 | 説明 |
|---|---|
| 一覧表示 | 登録されたデータの一覧を確認できる |
| 追加 | フォームから新しいデータを追加できる |
| 編集 | 既存データのフィールドを変更できる |
| 削除 | データを選択して削除できる(確認画面あり) |
| 検索 | 設定したフィールドで検索できる |
| フィルタ | 設定したフィールドでフィルタリングできる |
Step 4ModelAdminによるカスタマイズ
ModelAdminクラスを使って管理画面の表示を細かくカスタマイズできます。
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.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_page | 1ページの表示件数 | 20 |
| ordering | デフォルトの並び順 | ("-created_at",) |
| readonly_fields | 読み取り専用にするフィールド | ("created_at",) |
| list_editable | 一覧画面で直接編集可能にする | ("age",) |
| fields | 編集画面に表示するフィールド | ("name", "age") |
Step 6インラインモデル表示
関連するモデルを同じページで編集できるようにインライン表示を設定できます。例えば、会社の編集画面で社員も同時に編集できるようになります。
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で関連モデルをインライン編集できる