You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:36:05