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

Django通过ManyToMany字段获取User模型完整信息的问题

Django多对多关联获取User模型字段实现方法

school.user.all返回的是当前学校关联的所有用户对象组成的QuerySet,直接渲染该QuerySet只会调用模型的__str__方法(默认返回username),无法直接输出其他字段,按以下两种方式实现即可:

  • 模板层直接遍历(快速实现)
    对关联用户的QuerySet做嵌套循环,即可访问每个用户实例的所有字段,修改模板代码如下:

    {% for school in school %}
    <tr>
        <td>{{school.name}}</td>
        <td>
            {% for user_obj in school.user.all %}
                <span>{{ user_obj.first_name }} {{ user_obj.last_name }}</span>
                <!-- 同模型下其他字段可直接通过点语法获取,比如{{ user_obj.email }} -->
            {% empty %}
                暂无关联用户
            {% endfor %}
        </td>
    </tr>
    {% endfor %}
    

    其中{% empty %}是循环标签的配套语法,当没有关联用户时会展示对应提示内容。

  • 视图层优化(数据量大时推荐)
    如果关联用户数量较多,直接在模板里遍历会产生N+1数据库查询问题,建议在视图查询时提前预加载关联数据,修改views.py逻辑:

    def schools(request, pk):
      event = Event.objects.get(id=pk)
      # prefetch_related会一次性批量查询所有关联学校的用户数据,大幅减少数据库查询次数
      school = School.objects.filter(event=event).prefetch_related('user')
      return render(request, 'accounts/schools.html', {'event':event, 'school':school})
    

    预加载完成后,模板层的遍历写法和上面完全一致,不需要额外改动。

小提示:如果需要对关联用户做排序、筛选,可以在视图中使用Prefetch对象自定义关联查询的逻辑,满足更复杂的展示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:42:15