Admin siteのlist_displayをカスタマイズする - 基本編

list_displayは、modelのfieldを指定するのが基本です。
しかし、それだけでは便利な画面とは言えません。

change listにmodelにないデータを表示したり、計算結果を表示したりしてみましょう。

仕様

Bookmarkを保存するmodelを例に進めます。

list_displayには

  1. 登録日からの経過日数

を表示できるようにします。

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は以下のようになります。

admin_list_display01_01

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)

実行すると以下のようになります。

admin_list_display01_02

このように、入力したかどうかのチェックや納期までの日数などを算出して
表示することが出来ます。

twitter 2010-01-04 03:15:20.167076

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編