【Django】管理画面のカスタマイズ


はじめに

最近、業務でDjangoに触れる機会があったので、
その時に調べた内容を随時更新していこうと思います。

完全に自分用の記事なので多くは求めないで下さい。

・前提
管理画面にログインできる状態
models.pyに記述しmigrateが済んでいる

models.pyの内容

今回のmodels.pyの内容は下記になります。

models.py
from django.db import models

class User(models.Model):
    name = models.CharField("名前", max_length=32)
    mail = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    STATUS_DRAFT = "draft"
    STATUS_PUBLIC = "public"
    STATUS_SET = (
        (STATUS_DRAFT, "下書き"),
        (STATUS_PUBLIC, "公開"),
    )

    title = models.CharField("タイトル", max_length=128)
    body = models.TextField("本文")
    created_at = models.DateTimeField("作成日", auto_now_add=True)
    updated_at = models.DateTimeField("更新日", auto_now=True)
    status = models.CharField("公開ステータス", choices=STATUS_SET, default=STATUS_DRAFT, max_length=8)
    author = models.ForeignKey(User, related_name="entries", verbose_name="ユーザ", on_delete=models.CASCADE)

    def __str__(self):
        return self.title

では、この状態でどのような記述をしていけば
管理画面がカスタマイズされるかを書いていきます。

管理画面カスタマイズ

python3 manage.py startapp <アプリ名>で定義したアプリ配下に存在する、
admin.pyで基本的に設定を行なっていきます。

ページ内リンクを貼りましたので、お探しのものを選択して下さい。

管理画面に表示する

最初の状態では管理画面に作成したModelが表示されていないので、
それを表示するために下記を記述する必要があります。

admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    pass

@admin.register( )( )内は モデル名を記述して下さい。
また、記述するためにはモデルをインポートする必要があります。

リストに戻る

編集画面に表示させるitemをカスタマイズ

編集画面に遷移するとデフォルトでは編集可能な全てのfieldが表示されます。

この中で、タイトルと本文のみ表示したい場合は下記のように記述します。

admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    model = User
    fields = ["name", "mail"]

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    model = Entry
    fields = ["title", "body"]

fieldsの内容を編集すれば表示項目が変更されます。

すると画像のようになります。表示内容が減りました。

リストに戻る

選択画面に複数の項目を表示する

Entry内のitemを選択する画面で、デフォルトではタイトルのみ表示されています。

この画面上でタイトルだけでなく、
本文や作成者を表示したい!という場合は下記のように記述します。

admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    model = User
    list_display = ["name", "mail"]

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    model = Entry
    list_display = ["title", "body", "status", "author"]

list_displayを編集すれば表示項目が変更されます。

記述後は画像のようになります。

リストに戻る

さいごに

以上になります。

まだ少し触れただけなので項目が少ないですが、
新しい知識が増えたらこちらの記事を更新していきますので是非ご覧ください。