Djangoの管理サイトを使いやすくする方法をご紹介します。
目次
条件
- Django 2.2.5
前提
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の管理サイトにおける、レコードの一覧表示例は以下の通りです。
変更後は、レコード一覧に表示される情報が増えていることがわかります。

