Djangoの管理者画面に表示されるカラムを変更する

Djangoの管理者画面ではテーブルの情報を確認することができます。
そのためにはadmin.pyに登録が必要です。

いちばん基本的な登録方法はadmin.site.register(モデル名)を追記することですね。

from django.contrib import admin
from .models import Post

admin.site.register(Post)

すると、デフォルトでは以下のように、モデルのdef ___str__(self):で定義されたカラムが表示されます。

モデルに定義したその他の属性も表示させたい場合は、admin.pyを編集します。

表示対象は以下のモデルです(Post)

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
  # ここで定義しておいたステータスをstatusで選べるようにする
  STATUS_CHOICES = (
    ('draft', 'Draft'),
    ('published', 'Published'),
    ('test', 'TEST'),
  )
  title = models.CharField(max_length=250)

  # unique_for_dateパラメータはURLを「publisheとされた日付+slug」で作るということ。
  slug = models.SlugField(max_length=250, unique_for_date='publish')
  
  # many-to-oneリレーションを定義するためには、FeoreignKeyを設定する。
  # この場合は、Userでなければauthorになれない。Userが消えたらauthorも消える(CASCADEで設定する)
  # 
  author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
  body = models.TextField()
  publish = models.DateTimeField(default=timezone.now)
  created = models.DateTimeField(auto_now_add=True)
  updated = models.DateTimeField(auto_now=True)
  status = models.CharField(max_length=10, choices=STATUS_CHOICES,default='draft')
  
  # モデル内のMetaクラスはメタデータを持っている
  # データのソート順をMetaクラスで定義できる。
  class Meta:
    ordering = ('-publish',)

  # 管理者サイトで表示される属性を定義している
  def __str__(self):
    return self.title

こちらのモデルに定義した属性をそれぞれ管理者画面に表示するためには、admin.pyを編集します。

from django.contrib import admin
from .models import Post


@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
  # カラムに表示させる属性
  list_display = ('title', 'slug', 'author', 'publish', 'status')
  # フィルタをかけるカラム
  list_filter = ('status', 'created', 'publish', 'author')
  # 検索フィールド
  search_fields = ('title', 'body')
  
  prepopulated_fields = {'slug': ('title',)}
  raw_id_fields = ('author',)
  date_hierarchy = 'publish'
  ordering = ('status', 'publish')

これでpython manage.py runserverを実行し、http://127.0.0.1:8000/admin/blog/post/を確認すると、以下のようにカラムが表示されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です