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

如何在Django的HTML模板中显示外键关联模型的字段值?

解决Django模板中外键字段无法显示的问题

这个问题我之前也碰到过,核心原因是你用了values()方法返回字典,它不会自动包含外键关联的模型数据——咱们一步步来解决:

方案一:使用模型实例而非字典(推荐)

values()返回的是仅包含当前模型字段的扁平字典,而直接调用all()返回的是Student模型实例,这样你可以直接通过点语法访问外键关联的Course模型字段。

修改你的views.py代码:

def Student_Main(request):
    objs = Students.objects.all()  # 移除values()方法,返回模型实例
    template_name = 'genius/students.html'
    context = {'head_title': 'Little Genius Students', 'students': objs}
    return render(request, template_name, context)

模板代码不需要修改,{{i.course.class_name}}就能正常显示课程名称了。如果外键可能为null,可以加个默认值避免报错:

<td>{{i.course.class_name|default:"无课程"}}</td>

方案二:如果必须用values()(比如需要筛选特定字段优化性能)

如果坚持要使用values(),需要显式指定外键关联的字段,用双下划线__跨模型获取字段值,这样返回的字典里会包含这个字段的键值对。

修改你的views.py代码:

def Student_Main(request):
    # 显式列出需要的字段,包括外键关联的course__class_name
    objs = Students.objects.values(
        'id', 'name', 'dob', 'age', 'gender', 'grade', 
        'attending_school', 'course__class_name', 'address'
    ).all()
    template_name = 'genius/students.html'
    context = {'head_title': 'Little Genius Students', 'students': objs}
    return render(request, template_name, context)

然后修改模板中Course列的代码:

<td>{{i.course__class_name|default:"无课程"}}</td>

内容的提问来源于stack exchange,提问作者Vikrant Agrahari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:58:11