2024-09-22 14:28:31 发布
网友
我在Django的admin中公开了一个模型,它使用ModelAdmin的readonly_field s列表显示一个“user”字段,这是一个链接到Django的用户模型的ForiegnKey。默认情况下,只读字段会将此字段呈现为包含用户电子邮件的简单文本(例如someuser@domain.com)。如何更改此项以将其呈现为该用户的关联管理页的链接?(例如<a href="/admin/auth/user/123/">someuser@domain.com</a>)
someuser@domain.com
<a href="/admin/auth/user/123/">someuser@domain.com</a>
Cerin的答案在我的Django 1.8项目中不起作用,因为readonly_字段不应包含字符串“user_link”,而应包含对已定义函数的引用:
class ProfileAdmin(admin.ModelAdmin): # https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display def user(obj): change_url = reverse('admin:auth_user_change', args=(obj.user.id,)) return mark_safe('<a href="{0}">{1}</a>'.format(change_url, obj.user.email)) user.short_description = 'Edit linked user' raw_id_fields = ('user',) list_display = (user, 'last_name', 'first_name', 'specialization',) list_display_links = ('first_name', 'last_name', ,) readonly_fields = (user, 'user',)
请注意,user(obj)覆盖Profile.user字段的单个模型编辑和模型列表显示。还要注意,readonly_字段同时使用user和'user',一个呈现链接电子邮件,另一个呈现用户名。
深入研究源代码,我发现您基本上可以将自己的字段定义为ModelAdmin子类中的方法,并且只需从方法返回链接html,就可以将该字段呈现为链接。
例如
from django.contrib import admin from django.utils.safestring import mark_safe from django.core import urlresolvers class MyModelAdmin(admin.ModelAdmin): readonly_fields = ['user_link'] def user_link(self, obj): change_url = urlresolvers.reverse('admin:auth_user_change', args=(obj.user.id,)) return mark_safe('<a href="%s">%s</a>' % (change_url, obj.user.email)) user_link.short_description = 'User'
Cerin的答案在我的Django 1.8项目中不起作用,因为readonly_字段不应包含字符串“user_link”,而应包含对已定义函数的引用:
请注意,user(obj)覆盖Profile.user字段的单个模型编辑和模型列表显示。还要注意,readonly_字段同时使用user和'user',一个呈现链接电子邮件,另一个呈现用户名。
深入研究源代码,我发现您基本上可以将自己的字段定义为ModelAdmin子类中的方法,并且只需从方法返回链接html,就可以将该字段呈现为链接。
例如
相关问题 更多 >
编程相关推荐