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

Django DetailView多表关联展示与**kwargs传参报错排查

问题1:解决user_id KeyError并正确关联User数据

你当前报错的核心原因是URL仅传递了Order的pk参数,self.kwargs里根本不存在user_id。正确的做法是先获取当前请求对应的Order实例,再通过它的外键关联拿到对应的User:

修改order/views.py的get_context_data方法:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    # 获取当前页面对应的Order对象
    order = self.get_object()
    # 利用Django ORM的关联特性,直接从Order取对应的User(一个Order仅属于一个User)
    context['user'] = order.user
    return context

对应的模板order_show.html也可以简化(无需循环,因为是单个用户):

<p> Member:
    <li>
        <a href="{% url 'user:user_show' user.id %}">{{ user }}</a>
    </li>
</p>

注:如果你的Order模型中外键字段定义为user_id(不推荐,Django外键默认会自动生成xxx_id字段,模型里应定义为user = models.ForeignKey(User, ...)),也可以用User.objects.get(id=order.user_id),但直接用order.user更符合Django的最佳实践。

问题2:模板中关联展示User对应的Company信息

由于User和Company是一对多关系(一个Company对应多个User),User模型里应该有指向Company的外键(比如company = models.ForeignKey(Company, ...)),在模板里直接通过已有的user对象链式访问关联的Company即可:

修改模板代码,添加Company信息展示:

<p> Member:
    <li>
        <a href="{% url 'user:user_show' user.id %}">{{ user }}</a>
        <br>所属公司:{{ user.company.name }} <!-- 假设Company模型有name字段 -->
        <!-- 如需跳转公司详情页,可添加链接 -->
        <br><a href="{% url 'company:company_show' user.company.id %}">查看公司详情</a>
    </li>
</p>

如果需要展示Company的其他字段,直接链式访问即可,比如{{ user.company.address }}、{{ user.company.contact }}等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:15:05