Django Admin查询集结果输出与<a>超链接元素构造问题
问题解决方法
核心错误原因
- 函数执行到
return就会直接终止,你在循环内写return自然只能拿到第一个元素,不会继续遍历后续内容 values_list('academic', flat=True)返回的是Academic对象的主键ID,不是实例对象,无法直接调用surname、forename属性,也没法获取完整实例信息- 之前的
mark_safe传参格式错误,无法正确生成HTML标签,导致Admin页显示为空
正确实现代码
首先修改你的admin.py文件,完整代码如下:
from django.contrib import admin from django.urls import reverse from django.utils.safestring import mark_safe from .models import Partner, Academic @admin.register(Partner) class PartnerAdmin(admin.ModelAdmin): # 把自定义字段加入只读字段 readonly_fields = ('get_academic_links',) @admin.display(description='Academic link(s)') def get_academic_links(self, obj): # 直接查询所有和当前Partner通过ResearchActivity关联的Academic实例,自动去重 academics = Academic.objects.filter(researchactivity__partner=obj).distinct() # 存储所有超链接片段 link_list = [] for ac in academics: # 用reverse生成Academic的Admin编辑页链接,避免硬编码路径 edit_url = reverse('admin:yourappname_academic_change', args=(ac.id,)) # 构造超链接标签,显示内容自动调用__str__方法输出「姓, 名」格式 link_html = f'<a href="{edit_url}">{str(ac)}</a>' link_list.append(link_html) # 把所有链接用逗号拼接后返回,用mark_safe标记为安全HTML return mark_safe(', '.join(link_list))
注意事项
注意把上面代码里的
yourappname替换为你Django应用的实际名称,可查看项目对应应用下apps.py里的name属性值获取。
内容的提问来源于stack exchange,提问作者HBMCS
相关产品推荐
相关产品推荐

