概要(Django 管理画面=「DB をブラウザからいじれる最強の裏口」)
Django 管理画面(Django admin)は、
「自分で管理用の画面を作らなくても、モデルを登録するだけで
ブラウザからデータを追加・編集・削除できる“裏側の管理サイト”」です。
管理者ログイン機能、一覧・検索・フィルタ、フォーム、バリデーション、
全部セットで最初から付いてきます。
しかも、あなたが models.py に書いたモデル定義をそのまま使ってくれます。
初心者目線で言うと、
「まずは管理画面を触りながら、モデルとデータベースの感覚を掴む」のが
一番早いです。
管理画面を「とりあえず動かす」ところまで
スーパーユーザーを作ってログインする
Django プロジェクトを作ると、最初から admin アプリが有効になっています。settings.py の INSTALLED_APPS に 'django.contrib.admin' が入っているはずです。
開発サーバーを起動した状態で、まずは管理者ユーザーを作ります。
python manage.py createsuperuser
ユーザー名、メールアドレス、パスワードを聞かれるので入力します。
これで「管理画面にログインできるユーザー」が 1 人できました。
次にブラウザで http://127.0.0.1:8000/admin/ にアクセスします。
ログイン画面が出るので、さっき作ったユーザーでログインすると、
「Django 管理サイト」というトップページが表示されます。
最初は「Users」と「Groups」くらいしか出ていませんが、
ここに自分のモデルを登録していくことで、
管理画面からデータを操作できるようになります。
モデルを admin に登録する基本
例えば、シンプルな Book モデルがあるとします。
# app/models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
price = models.IntegerField()
def __str__(self):
return self.title
Pythonこの Book を管理画面に出したいときは、
同じアプリ内に admin.py を作り、こう書きます。
# app/admin.py
from django.contrib import admin
from .models import Book
admin.site.register(Book)
Pythonこれだけです。
サーバーを再起動して /admin/ を開き直すと、
「Books」という項目が増えているはずです。
クリックすると、Book の一覧画面が表示され、
右上の「追加」から新しい Book を登録できます。
ここで重要なのは、
「models.py に書いたモデルを、admin.py で register するだけで
管理画面に“管理対象”として現れる」という流れです。
管理画面でできることのイメージ
一覧表示・検索・フィルタ・ソート
Book を登録すると、管理画面の一覧ページで
全ての Book が表形式で表示されます。
デフォルトでは __str__ の戻り値(ここでは title)が表示されますが、
後でカスタマイズして複数のカラムを出すこともできます。
一覧画面には、検索ボックスやフィルタ(右側のサイドバー)を
追加することもできます。
大量のデータを管理するときにとても便利です。
また、カラム名をクリックするとソートもできます。
「価格の高い順に並べる」といったことも、
コードを書かずに管理画面上でできます。
追加・編集・削除とバリデーション
「追加」ボタンを押すと、
Book のフィールドに対応したフォームが自動生成されます。
title 用のテキストボックス
price 用の数値入力欄
などが出てきて、
models.py に書いた制約(max_length や blank, null など)に応じて
バリデーションも自動で行われます。
保存すると DB に INSERT、
編集して保存すると UPDATE、
削除ボタンで DELETE が走ります。
つまり、
「モデルさえ定義しておけば、
管理画面が DB 操作の UI を全部用意してくれる」
という状態です。
admin.ModelAdmin でのカスタマイズ(ここが一番おいしい)
一覧画面の表示項目を変える(list_display)
デフォルトの一覧は __str__ だけなので、
例えば「タイトルと価格を並べて表示したい」とします。
その場合は、admin.ModelAdmin を継承したクラスを定義します。
# app/admin.py
from django.contrib import admin
from .models import Book
class BookAdmin(admin.ModelAdmin):
list_display = ("id", "title", "price")
admin.site.register(Book, BookAdmin)
Pythonこうすると、Book の一覧画面に
id、title、price の 3 列が表示されます。
list_display に書いたフィールド名が
そのまま一覧のカラムになります。
ここでのポイントは、
「管理画面専用の設定は ModelAdmin クラスにまとめる」
ということです。
検索ボックスやフィルタを追加する(search_fields, list_filter)
例えば、タイトルで検索したい場合はsearch_fields を使います。
class BookAdmin(admin.ModelAdmin):
list_display = ("id", "title", "price")
search_fields = ("title",)
Pythonこれで一覧画面の上に検索ボックスが現れ、
タイトルにその文字列を含む Book だけを絞り込めます。
また、特定のフィールドでフィルタしたい場合はlist_filter を使います。
class BookAdmin(admin.ModelAdmin):
list_display = ("id", "title", "price")
search_fields = ("title",)
list_filter = ("price",)
Pythonlist_filter に指定したフィールドは、
右側のサイドバーにフィルタとして表示されます。
日付フィールドなどを指定すると、
「今日」「過去 7 日間」などの便利なフィルタが自動で出てきます。
フォームのレイアウトを調整する(fields, fieldsets)
管理画面の編集フォームで、
フィールドの順番やグループ分けを変えたいときはfields や fieldsets を使います。
シンプルに順番だけ変えるなら fields です。
class BookAdmin(admin.ModelAdmin):
fields = ("title", "price")
Python複数のグループに分けたい場合は fieldsets を使います。
class BookAdmin(admin.ModelAdmin):
fieldsets = (
("基本情報", {"fields": ("title",)}),
("詳細", {"fields": ("price",)}),
)
Pythonこれでフォームが「基本情報」「詳細」という
見出し付きのセクションに分かれます。
管理画面は「開発者だけが使う UI」ですが、
ここを整えておくと、
自分やチームメンバーがデータを扱うときのストレスが
かなり減ります。
管理画面とモデル設計の関係(ここを意識すると一気に楽になる)
モデルをちゃんと設計すると、管理画面が勝手に“いい感じ”になる
Django の管理画面は、
models.py の情報を最大限活用します。
フィールドの型(CharField, IntegerField, DateField など)
制約(max_length, choices, blank, null など)__str__ の定義
これらを丁寧に書いておくと、
管理画面のフォームや一覧が自然と使いやすくなります。
例えば、choices を使って「選択肢」を定義すると、
管理画面では自動的にセレクトボックスになります。
class Book(models.Model):
CATEGORY_CHOICES = [
("tech", "技術書"),
("novel", "小説"),
]
title = models.CharField(max_length=200)
category = models.CharField(max_length=10, choices=CATEGORY_CHOICES)
Pythonこうしておけば、
管理画面で category を選ぶときに
「技術書」「小説」という選択肢が表示されます。
つまり、
「モデルをちゃんと設計するほど、管理画面が勝手にリッチになる」
という構造です。
管理画面は「開発中のデータ操作ツール」としても超優秀
開発中に、
テストデータをちょっと入れたい
特定のレコードだけ値を変えたい
DB の中身をざっと確認したい
という場面は必ず出てきます。
そのたびに SQL を書いたり、
別途ツールを立ち上げたりするのは面倒です。
Django 管理画面をちゃんと整えておくと、
ブラウザから数クリックでそれができるようになります。
「本番運用のための管理 UI」としてだけでなく、
「開発者のための DB フロントエンド」としても
かなり強力な武器になります。
まとめ(Django 管理画面は「モデルを書いた瞬間に手に入る、無料の管理システム」)
Django 管理画面を初心者向けに整理すると、こうなります。
管理画面は /admin/ でアクセスできる「裏側の管理サイト」で、createsuperuser で作ったユーザーでログインする。
models.py に定義したモデルを admin.py で admin.site.register() するだけで、そのモデルの一覧・追加・編集・削除画面が自動生成される。admin.ModelAdmin を使うと、一覧のカラム(list_display)、検索(search_fields)、フィルタ(list_filter)、フォームレイアウト(fields, fieldsets)などを柔軟にカスタマイズできる。
モデルのフィールド定義や choices、__str__ を丁寧に書くほど、管理画面の使い勝手が自然と良くなる。
