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

Django模板中如何调用OneToOneField反向关联获取User表字段

Django模板获取OneToOneField关联User模型的first_name字段方案

问题根源

你在视图中调用了.values()方法查询UserInfo,返回的结果是字典格式,不是UserInfo模型实例,无法通过ORM关联特性访问关联的User对象字段。

另外补充说明:你定义的related_name="parent_user"是给User对象反向查询对应UserInfo用的,语法为某User实例.parent_user,当前你需要从UserInfo取关联User,属于正向关联,直接用user属性即可。


解决方案1(推荐):修改视图,传入模型实例

该方案写法最简单,还可通过select_related提前联表查询避免N+1性能问题:

修改视图代码

start = 18
end =25
# 去掉.values(),加select_related提前加载关联User数据
matching = UserInfo.objects.filter(
    age__gte=start, age__lte=end
).select_related('user')
for z in matching:
    # 换成取实例的user id判断
    if z.user.id not in rec_ids:
        profiles.append(z)
context = {
    'profiles' : profiles,
}
return render(request, 'home/news.html', context)

修改模板对应位置

直接通过正向关联取first_name:

User First Name is : {{ p.user.first_name }}

解决方案2:保留.values()写法,主动查询关联字段

如果一定要用字典格式返回,需要在调用values时主动声明要取的关联字段:

修改视图查询语句

matching = UserInfo.objects.filter(
    age__gte=start, age__lte=end
).values('id', 'user_id', 'image', 'age', 'bio', 'user__first_name') # 新增关联字段

修改模板对应位置

User First Name is : {{ p.user__first_name }}

内容的提问来源于stack exchange,提问作者Rahul Negi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:15:04