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

如何在Django模板中渲染多对多关联的角色名称?

解决Django多对多角色名称显示问题

1. 修复模板循环结构错误

你的模板存在语法错误:多余的{% endfor %}导致循环结构混乱,且角色查询代码写在循环外部,无法获取当前freelancers对象的关联角色。正确的模板写法如下:

{% for f in free %}
    <p>{{ f.user }}</p>
    <div>关联角色:</div>
    {% for role in f.role.all %}
        <span>{{ role.name }}</span> <!-- 直接调用角色的name字段 -->
        <!-- 也可以利用roles模型的__str__方法,直接写 {{ role }} 显示名称 -->
    {% empty %}
        <span>无关联角色</span>
    {% endfor %}
    <br>
{% endfor %}

2. 优化视图查询性能(推荐)

当前视图的freelancers查询未预取关联数据,会触发多次数据库查询(N+1问题)。可以通过select_related(处理外键)和prefetch_related(处理多对多)优化查询效率:

def company_details(request, id):
    obj = Company.objects.get(id=id)
    pro = Projects.objects.filter(company=id)
    # 预取user外键和role多对多关联数据,减少数据库查询次数
    free = freelancers.objects.filter(company=id).select_related('user').prefetch_related('role')
    
    return render(request, 'company/company_details.html', {
        'obj': obj,
        'pro': pro,
        'free': free,
    })

3. 额外建议:规范模型命名(可选)

按照Django和PEP8的通用规范,模型类名建议使用大驼峰命名,比如将roles改为Role,freelancers改为Freelancer,提升代码可读性和规范性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:05:21