[Django] 管理サイトでオブジェクトにリンク
2013年1月2日
UserProfileのChangeListからUserにリンクを貼りたい場合
from django.contrib import admin
from django.core.urlresolvers import reverse
from accounts.models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
def subactions(self, obj):
return u'''<a href="%s">Change User</a>''' % (
reverse('admin:auth_user_change', args=(obj.user.id,)),
)
subactions.allow_tags = True
subactions.short_description = u'Actions'
admin.site.register(UserProfile, UserProfileAdmin)
Djangoバージョンは1.4.3
管理サイトのURL名一覧
該当部分のコピペ
django/contrib/admin/site.py
# Admin-site-wide views.
urlpatterns = patterns('',
url(r'^$',
wrap(self.index),
name='index'),
url(r'^logout/$',
wrap(self.logout),
name='logout'),
url(r'^password_change/$',
wrap(self.password_change, cacheable=True),
name='password_change'),
url(r'^password_change/done/$',
wrap(self.password_change_done, cacheable=True),
name='password_change_done'),
url(r'^jsi18n/$',
wrap(self.i18n_javascript, cacheable=True),
name='jsi18n'),
url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$'
wrap(contenttype_views.shortcut)),
url(r'^(?P<app_label>\w+)/$',
wrap(self.app_index),
name='app_list')
)
django/contrib/admin/options.py
urlpatterns = patterns('',
url(r'^$',
wrap(self.changelist_view),
name='%s_%s_changelist' % info
url(r'^add/$',
wrap(self.add_view),
name='%s_%s_add' % info),
url(r'^(.+)/history/$',
wrap(self.history_view),
name='%s_%s_history' % info),
url(r'^(.+)/delete/$',
wrap(self.delete_view),
name='%s_%s_delete' % info),
url(r'^(.+)/$',
wrap(self.change_view),
name='%s_%s_change' % info),
)
下の方は、アプリ名とモデル名から動的に名前が変わります
例えば、django.contrib.authアプリのユーザ情報ならこうなる
reverse('auth_user_changelist') reverse('auth_user_add') reverse('auth_user_history', args=(id,)) reverse('auth_user_delete', args=(id,)) reverse('auth_user_change', args=(id,))
蛇足
aタグをベタ打ちしたくないんだけど、どうすりゃいいんだろう?