Admin siteのlist_displayをカスタマイズする - 基本編
list_displayは、modelのfieldを指定するのが基本です。
しかし、それだけでは便利な画面とは言えません。
change listにmodelにないデータを表示したり、計算結果を表示したりしてみましょう。
仕様
Bookmarkを保存するmodelを例に進めます。
list_displayには
- 登録日からの経過日数
を表示できるようにします。
model作成
models.py
from django.db import models
from datetime import datetime
class Bookmark(models.Model):
title = models.CharField(max_length = 200)
url = models.CharField(max_length = 500)
date = models.DateTimeField()
def __unicode__(self):
return self.title
def save(self):
if not self.id:
self.date = datetime.now()
super(Bookmark, self).save()
admin作成
admin.py
from django.contrib import admin
from appname.models import Bookmark
class BookmarkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'date')
admin.site.register(Bookmark, BookmarkAdmin)
サンプルデータ追加
>>>from appname.models import Bookmark
>>>b = Bookmark(title = 'Google', url = 'http://www.google.co.jp/')
>>>b.save()
change listは以下のようになります。
change listのカスタマイズ
admin.pyのBookmarkAdminクラスをカスタマイズします。
admin.py
from django.contrib import admin
from appname.models import Bookmark
from datetime import datetime
class BookmarkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'date', 'days')
def days(self, obj):
d = datetime.date(datetime.now())
return (d - datetime.date(obj.date)).days
admin.site.register(Bookmark, BookmarkAdmin)
実行すると以下のようになります。
このように、入力したかどうかのチェックや納期までの日数などを算出して
表示することが出来ます。