はじめに
「Djangoの管理者ページのカスタマイズなんて、今までしたことないよ〜」という方向け。
初級編です。
カスタマイズしなくても十分使えそうだが、エンジニア以外の人が触るようになると、デフォルトだと少し寂しい?
詳細な解説というより、ググると良い用語をパパッと上げていくスタイルです。
ちゃんとまとめると大変ですからね。。。
Djangoのドキュメント
https://docs.djangoproject.com/en/3.0/ref/contrib/admin/
ModelAdminクラス
基本的には、ModelAdmin
クラスのサブクラスを作成して、カスタマイズ内容を記述する。
例えばSampleModelという名前のモデルをカスタマイズしようと思ったら、以下のようにする。
from django.contrib import admin
# 通常は「モデル名+Admin」という名前にする
class SampleModelAdmin(admin.ModelAdmin):
'''
このクラスの中にカスタマイズ内容を記述
'''
# SampleModelにSampleModelAdminを適用
admin.site.register(SampleModel, SampleModelAdmin)
これ以降は、ModelAdminクラスの中の記述のみを書く。
例えば
def hoge():
return
と書いたら、実際は
class SampleModelAdmin(admin.ModelAdmin):
def hoge():
return
と読み替えてください。
どんなカラムを表示するか
レコード一覧の一番上にカラム名が表示されるが、どんなカラムを表示したいか設定しよう。
以下はモデルがtext,updated_atというフィールドを持っていた場合の例。
list_display = ('__str__', 'text', 'updated_at') # この3つのカラムを表示する
次に、フィールドにはない値を表示する場合。
list_display = ('__str__', 'text', 'updated_at', 'get_owner_name')
def get_owner_name(self, obj):
# 第二引数のobjはレコード自身を表す
return "I am owner"
get_owner_name.short_description = 'オーナー名'
こうすると「オーナー名」というカラムが追加され、この場合は全てのレコードに「I am owner」と表示される。
検索対象を設定する
上部に検索ボックスが存在するが、その検索対象を絞ることができる。
# SampleModel.text, SampleModel.updated_at, SampleModel.owner.username を検索対象にする
search_fields = ('text', 'updated_at', 'owner__username`)
操作を追加する
デフォルトでは「選択された<モデル名>の削除」という操作が存在するはず。
自作のアクションは以下のようにactions
にリスト形式で記述するが、ここに明示的に含めなくても「選択された<モデル名>の削除」は存在し続ける。
actions = ['my_custom_action']
def my_custom_action(self, request, queryset):
# なんか処理
return None
my_custom_action.short_description = '私だけのアクション'
return None
とすれば操作完了時に何もしないが、例えばテンプレートを返してページ遷移なんかもできる。
モデルの表示名を変更する
これはModelAdmin
ではなく元のModel
クラスに書いておく。
class SampleModel(models.Model):
class Meta:
verbose_name = 'サンプルモデル'
verbose_name_plural = 'サンプルモデル一覧'
フィールドにリンクを貼るか
list_display_links = ('text',)
応用編:検索処理のカスタマイズ
検索対象のカスタマイズを紹介しましたが、検索ワード(クエリ)が与えられた時に、実際にどのような検索を行うかもカスタマイズできます。
これは長くなるので概要だけにしますが、以下の関数を定義して検索処理を上書きします。
def get_changelist(self, request, **kwargs):
最後に
以上のカスタマイズができれば、はじめはそこそこ満足ではないでしょうか?
adminページのテンプレート自体のカスタマイズや、admi内でのページ遷移については別の記事で書こうかと思います。