サイトアイコン 知的好奇心

Djangoの管理サイトを使いやすくする方法

Djangoの管理サイトを使いやすくする方法をご紹介します。

条件

前提

model

以下のようなモデルとします。

# models.py

from django.db import models
from django.urls import reverse


class Work(models.Model):
    """作品モデル"""
    class Meta:
        db_table = 'work'

    name = models.CharField(verbose_name='作品名', max_length=255)
    memo = models.CharField(verbose_name='メモ', max_length=255, default='', blank=True)
    author = models.ForeignKey(
        'auth.User',
        on_delete=models.CASCADE,
    )
    created_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
    updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True)

    def __str__(self):
        return self.name

    @staticmethod
    def get_absolute_url(self):
        return reverse('pictures:index')


class Image(models.Model):
    """イメージモデル"""
    class Meta:
        db_table = 'image'

    work = models.ForeignKey(Work, verbose_name='作品', on_delete=models.PROTECT)
    image = models.ImageField(upload_to="image/", verbose_name='イメージ')
    created_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
    updated_at = models.DateTimeField(verbose_name='更新日時', auto_now=True)

    def __str__(self):
        return self.work.name + ":" + str(self.data_datetime)

管理サイトの表示設定

管理サイトの表示設定を変更するためには、admin.pyを編集します。

変更前

単にモデルをAdminサイトに表示するのは以下のように記述すればOKです。
しかし、これでは情報が少なくてレコード内容が分かりづらいです。

# admin.py

from django.contrib import admin

from .models import Work, Image

admin.site.register(Work)
admin.site.register(Image)

変更後

以下のように新しくクラスを作り、一覧フィールド(list_display)および、編集フィールド(fields)の設定を行います。
また、必要に応じて、ソート(ordering)の設定も行います。

admin.site.register()で第二引数に作成したクラスをセットします。

# admin.py

from django.contrib import admin

from .models import Work, Image


class WorkModelAdmin(admin.ModelAdmin):
    # 一覧表示画面のフィールド
    list_display = ('name', 'memo', 'author', 'created_at', 'updated_at')
    # 一覧表示画面のソート
    ordering = ('created_at',)  # '-created_at' とすると降順になります。
    # 編集画面のフィールド
    fields = ('name', 'memo', 'author')


class ImageModelAdmin(admin.ModelAdmin):
    # 一覧表示画面のフィールド
    list_display = ('work', 'image', 'created_at', 'updated_at')
    # 編集画面のフィールド
    fields = ('work', 'image', 'data_datetime')


admin.site.register(Work, WorkModelAdmin)
admin.site.register(Image, ImageModelAdmin)

実行結果

Djangoの管理サイトにおける、レコードの一覧表示例は以下の通りです。

変更後は、レコード一覧に表示される情報が増えていることがわかります。

変更前

変更後

参考

Django公式:Django の admin サイト

https://docs.djangoproject.com/ja/2.2/ref/contrib/admin/

モバイルバージョンを終了