• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Django / Djangoの管理画面(admin)のカスタマイズ(レコード名の変更、順番の変更、検索窓の追加…)

Djangoの管理画面(admin)のカスタマイズ(レコード名の変更、順番の変更、検索窓の追加...)

1 レコード一覧上に表示される各レコードの名前を変更する
2 各レコード画面上の項目と順番を変更する
3 レコード一覧上の検索窓の検索対象を変更する
4 レコード一覧上にフィルターを追加する
5 レコード一覧上に表示する項目を変更する
6 レコード一覧画面上から値を変更できるようにする
7 画面のレイアウトを変える
8 関連記事

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


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

レコード一覧画面とは以下の画面のことを言う。
ここでは、Animalというモデルを例として作成した。


上のレコード一覧画面上では、Animal object(1), Animal object(2)などと表示されており、今回はこの名前を変更する方法を説明する。

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

  • # models.py(変更前)
from django.db import models

class Animal(models.Model):
    name = models.CharField(max_length=256)
    height = models.PositiveIntegerField()
    weight = models.PositiveIntegerField()

class Human(models.Model):
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)
    phone = models.PositiveIntegerField()

これに、__str__メソッドを追加する

  • # models.py(変更後)
from django.db import models

class Animal(models.Model):
    name = models.CharField(max_length=256)
    height = models.PositiveIntegerField()
    weight = models.PositiveIntegerField()

    def __str__(self):
        return self.name

class Human(models.Model):
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)
    phone = models.PositiveIntegerField()

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

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

  • Animalモデル


名前(self.name)が画面上に表示される。

  • Humanモデル


名前 苗字(self.firstname + self.last_name)が画面上に表示される。


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

次に、レコード画面上の項目(カラム)の表示項目と順番を変える方法について紹介する。
これは、admin.pyで以下のように各モデルにModelAdminを継承したクラスを設定すればよい。

  • # admin.pyの設定
from django.contrib import admin
from . import models

# django.contrib.admin.ModelAdminを継承したクラスを作成
class HumanAdmin(admin.ModelAdmin):
    # fields変数を設定する
    fields = ['phone', 'last_name']

# admin.site.registerの第2引数に設定する
admin.site.register(models.Human, HumanAdmin)
admin.site.register(models.Animal)

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

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


First nameとLast nameとPhoneが表示される

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


HumanAdminで設定したfields(phone, last_name)だけが表示される


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

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

  • # admin.pyの設定
from django.contrib import admin
from . import models

class HumanAdmin(admin.ModelAdmin):
    # 検索窓で検索すると、last_name, first_nameから中間一致検索が行われる
    search_fields = ['last_name', 'first_name']

admin.site.register(models.Human, HumanAdmin)
admin.site.register(models.Animal)

上のようにsearch_fields上に検索対象を指定すると、指定したカラムで検索できるようになる


検索窓が表示される。


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

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

  • # admin.pyの設定
from django.contrib import admin
from . import models

class HumanAdmin(admin.ModelAdmin):
    list_filter = ['first_name', 'last_name']

admin.site.register(models.Human, HumanAdmin)
admin.site.register(models.Animal)

実際画面上には、以下のように表示される。

右端のFILTERで絞り込むことができ、画面上では、First NameがTaroのもののみで絞り込んでいる。


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

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

  • # admin.pyの設定
from django.contrib import admin
from . import models

class HumanAdmin(admin.ModelAdmin):
    list_display = ['first_name', 'last_name']

admin.site.register(models.Human, HumanAdmin)
admin.site.register(models.Animal)

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


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

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

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

  • # admin.pyの設定
# admin.py

from django.contrib import admin
from . import models

class HumanAdmin(admin.ModelAdmin):
    list_display = ['first_name', 'last_name']
    list_editable = ['last_name']
    # list_editable = ['first_name']とする場合
    # list_display_links = ['last_name']

admin.site.register(models.Human, HumanAdmin)
admin.site.register(models.Animal)

実際に表示される画像


last_nameが編集できるようになる


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

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

  • # settings.pyの設定
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],# templatesのディレクトリを設定する
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

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

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

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

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

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

  • # base_site.htmlの設定
<!-- base_site.html -->
{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">フリーランスのDjango画面</a></h1>
<!-- 名前を編集 -->
{% endblock %}

{% block nav-global %}{% endblock %}

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

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

関連記事

現役エンジニアがDjangoに関する本を5つ紹介
現役エンジニアがDjangoに関する本を5つ紹介
WindowsでDjango、Anaconda、VSCodeのインストールとDjangoを開発する環境の構築をする
WindowsでDjango、Anaconda、VSCode…
MacでDjango、Anaconda、VSCodeのインストールとDjangoを開発する環境の構築をする
MacでDjango、Anaconda、VSCodeのインス…
DjangoのFormに初期値を設定する方法
DjangoのFormに初期値を設定する方法
DjangoでModelのsave前後で処理を行うSignalのpre_save, post_saveの使い方
DjangoでModelのsave前後で処理を行うSigna…
DjangoのModelにSlugFieldを利用する。その利用方法と
DjangoのModelにSlugFieldを利用する。その…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 レコード一覧上に表示される各レコードの名前を変更する
2 各レコード画面上の項目と順番を変更する
3 レコード一覧上の検索窓の検索対象を変更する
4 レコード一覧上にフィルターを追加する
5 レコード一覧上に表示する項目を変更する
6 レコード一覧画面上から値を変更できるようにする
7 画面のレイアウトを変える
8 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Django講座
【Udemy】Django入門講座(0からDjangoを学習: Python講座つき)
受講生6500人ほどの人気講座。<strong>View, Template, Model, Cla...
詳細 ▶

Footer

利用規約