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の管理サイトにおける、レコードの一覧表示例は以下の通りです。
変更後は、レコード一覧に表示される情報が増えていることがわかります。