Django

Djangoの管理画面(admin)をカスタマイズする

Djangoの中心的な機能として便利な管理画面があります。この記事では、その管理画面をカスタマイズして、より便利なものにしていく方法について記載したいと思います。

Djangoの管理画面で管理する上で、絶対に必要な知識です。

レコード一覧上に表示される各レコードの名前を変更する

レコード一覧画面とは以下の画面です。ここでは、Animalというモデルを例として作成しました。
上のように、レコード一覧画面上では、Animal object(1), Animal object(2)などと表示されますが、今回はこの名前を変更します。

以下のようなmodelsを定義していますが、これに__str__を追加することで画面上の名前が変更されます。

これに、__str__メソッドを追加します。

画面上には、以下のように表示されます。

  • Animalモデル
  • Humanモデル

各レコード画面上の項目と順番を変更する

次に、レコード画面上の項目(カラム)の表示項目と順番を変える方法について記載します。
これは、admin.pyに以下のように設定します。

上のように設定すると管理画面のHumanモデルの各レコードでphone, last_nameカラムが表示され、順番もその通りになります。下のような感じです

  • レコード画面(変更前)
  • レコード画面(変更後)

レコード一覧上の検索窓の検索対象を変更する

これには、admin.pyにsearch_fieldsを設定したdjango.contrib.admin.ModelAdmin継承のクラスを作成して、モデルに設定します。

上のようにsearch_fields上に、検索対象を指定すると指定したカラムが検索されるようになります。

レコード一覧上にフィルターを追加する

レコード一覧画面上にフィルターがあると、同じ要素のレコードだけで絞りこみができるようになります。
追加するには、admin.pyにlist_fileterを追加すればよいです。

実際画面上には、以下のように表示されます。
右端のFILTERで絞り込むことができ、画面上では、First NameがTaroのもののみで絞り込んでいます。

レコード一覧上に表示する項目を変更する

レコード一覧上に表示する項目を変更するには、admin.py上にlist_displayを設定すればよいです。

上のように設定すると、レコード一覧画面上にfirst_name, last_nameが表示されるようになります。

レコード一覧画面上から値を変更できるようにする

レコード一覧画面上から値を変更するには、admin.pyにlist_editableを設定すればよいです。
例えば、以下の設定をするとfirst_nameカラムをレコード一覧画面上から編集できるようになります。
また、list_editableに設定するカラムは、list_displayに設定しなければなりません

また、list_displayの1番目のカラムは詳細画面のリンクになるため、list_editableに設定はできません(ただし、list_display_linksに2番目以降のカラムを設定すればよいです)

実際に表示される画像(last_nameが編集できるようになります)

画面のレイアウトを変える

画面のレイアウトを変えるには、adminのテンプレートファイルをプロジェクト上に作成して元のファイルを上書くことでできます。
以下のようにします。
まず、settings.pyのTEMPLATES変数を編集します。

次に、プロジェクト直下に/templates/adminフォルダを作成します。
このadminフォルダ内に管理サイトで利用するテンプレートファイルを作成してそこに自分ようにカスタマイズします。

それには、まずdjangoのGithub上のソースコードから元のファイルを取得します。
URL

上記URLの下の、contrib/admin/templates/adminフォルダ
内のファイルを開いて中身をコピーします。

次に、templates/admin内に同名のファイルを作成して中身を張り付け、内容を変更します。

ここでは、base_site.htmlを編集します。

すると画面上には下のように表示されるようになります。

これを、使えば自由にDjangoの管理画面をカスタマイズできるようになります。是非、ご活用ください!