Django中如何获取profiles模块中特定用户的关联数据
问题核心原因
你当前的实现存在两个逻辑问题:
- 传递给模板的
csoport变量是当前项目所有用户的Profile集合,模板中遍历该集合会输出所有用户的分组值,无法匹配到对应用户 - 查询
Kapcsolodasok数据时误用了Profile模型的Raw查询,关联取值逻辑冗余
最优解决方案(使用Django ORM,易维护无SQL注入风险)
1. 重写视图层查询
替换views.py中的查询逻辑,用ORM的关联查询直接获取所有需要的字段,同时避免N+1查询问题:
@login_required def project_details_report(request, projekt_id): # 预关联User和Profile表,过滤当前项目下的所有关联记录 kapcsolodasok = Kapcsolodasok.objects.select_related( 'user_name', 'user_name__profile' ).filter(user_name__profile__projekt_id=projekt_id) # 获取当前项目对象 projekt = Projekt.objects.get(id=projekt_id) context = { 'kapcsolodasok': kapcsolodasok, 'projekt': projekt, } return render(request, 'stressz/szervezeti_diagnozis.html', context)
2. 修改模板取值逻辑
不需要额外遍历分组集合,直接从每条记录的关联字段中取对应用户的分组值即可:
图表数据格式
{% for k in kapcsolodasok %} { id: "{{ k.user_name.get_full_name }}", label: "{{ k.user_name.get_full_name }}", group: "{{ k.user_name.profile.csoport }}" }, {% endfor %}
期望的用户分组列表格式
{% for k in kapcsolodasok %} user: {{ k.user_name.id }}, csoport: {{ k.user_name.profile.csoport }} {% endfor %}
兼容原生SQL的修改方案
如果坚持使用原生SQL实现,只需在Kapcsolodasok的查询中加入csoport字段到返回结果,删除单独的csoport查询即可,模板直接从kapcsolodasok的每条记录中取csoport字段值。
内容的提问来源于stack exchange,提问作者RlM
相关产品推荐
相关产品推荐

