Admin siteのlist_displayをカスタマイズする - リンク編
win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編では、fieldになく算出した値を表示することが出来ましたが、リンクが出来るとさらに便利になります。
仕様
- win-django.com - Admin siteのlist_displayをカスタマイズする - 基本編で使用したBookmarkモデルクラスを使用します。
- '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)
'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.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 siteになるのでは。