Admin siteのlist_displayをカスタマイズする - リンク編

win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編では、fieldになく算出した値を表示することが出来ましたが、リンクが出来るとさらに便利になります。

仕様

  1. win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編で使用したBookmarkモデルクラスを使用します。
  2. 'link'を追加し、クリックすると別ウィンドウに'url'fieldに登録したURLを表示出来るようにします。

修正前のadmin.pyと画面

win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編でのadmin.pyと画面です。

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_01

'link'の追加

win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編で使用したadmin.pyをさらに変更します。
'link'を作成するので'url'は削除します。

admin.py

from django.contrib import admin
from appname.models import Bookmark
from datetime import datetime

class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('title', 'date', 'days', 'link')

    def days(self, obj):
        d = datetime.date(datetime.now())
        return (d - datetime.date(obj.date)).days

    def link(self, obj):
        return '<a href = "%s" target = "_blank">link</a>' % obj.url

admin.site.register(Bookmark, BookmarkAdmin)

change list表示

このままではHTMLタグが表示されるだけで、もう少し手を加える必要があります。

admin_list_display02_01

admin.py 修正

以下の1行加えるだけでリンクが表示されます。

admin.py

from django.contrib import admin
from appname.models import Bookmark
from datetime import datetime

class BookmarkAdmin(admin.ModelAdmin):
    list_display = ('title', 'date', 'days', 'link')

    def days(self, obj):
        d = datetime.date(datetime.now())
        return (d - datetime.date(obj.date)).days

    def link(self, obj):
        return '<a href = "%s" target = "_blank">link</a>' % obj.url
    link.allow_tags = True

admin.site.register(Bookmark, BookmarkAdmin)

admin_list_display02_02

これを利用すればさらに便利なadmin siteになるのでは。

twitter 2010-01-04 18:10:25.616032

関連ページ

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編