如何在Django admin的list_display中实现点击跳转关联模型对象?
实现方法
你需要在PollerCommentAdmin类中自定义一个返回跳转链接的方法,替换list_display中原有的poller字段即可,具体操作如下:
1. 导入依赖工具
在Admin.py头部引入所需函数:
from django.urls import reverse from django.utils.safestring import mark_safe
2. 修改Admin类配置
新增自定义列方法,调整list_display配置:
@admin.register(Comment) class PollerCommentAdmin(admin.ModelAdmin): # 把原来的poller替换为自定义的方法名 list_display = ('user', 'created_on', 'link_to_poller', 'comment', 'flag_count', 'upvote_count', 'downvote_count', 'is_public', 'is_removed') # 给自定义列设置表头显示名称,和原有保持一致 link_to_poller.short_description = 'Poller' # 自定义生成可跳转链接的方法 def link_to_poller(self, obj): # 注意把下方的your_app_name替换为Poller模型所在的应用名 poller_edit_url = reverse('admin:your_app_name_poller_change', args=[obj.poller.pk]) # mark_safe用于告诉Django这段HTML内容无需转义可直接渲染 return mark_safe(f'<a href="{poller_edit_url}">{obj.poller}</a>')
注意事项
- reverse参数的url名称规则为
admin:<应用名>_<模型名小写>_change,如果不确定对应名称,可以执行python manage.py show_urls命令查询Poller编辑页的url名 - 如果你给Poller模型的
__str__方法定义了返回值,链接显示的文本就是该返回值,你也可以根据需要修改成其他字段,比如obj.poller.title之类的
内容的提问来源于stack exchange,提问作者JSRB
相关产品推荐
相关产品推荐

