如何在Django中用values_list展示指定用例关联的用户名
问题解决:展示指定用例关联的用户名
问题根源
- 查询条件错误:UsecaseAssign模型中没有直接的
usecase_id字段,需通过外键关联的usecase__usecase_id过滤指定用例 - 未关联User模型:原查询仅获取
user_email字段值,未关联User模型,无法直接获取user_name - 查询方式不当:
values_list+values的组合会丢失关联对象信息,无法访问关联模型属性
修正步骤
1. 修正views.py中的查询逻辑
替换原查询代码为:
@user_login_required def view_usecase_details(request,ucid): usecase_details = Usecase.objects.filter(usecase_id=ucid).first() if request.method == "GET": # 通过外键关联过滤,预加载User对象避免N+1查询 usecase_assigned = UsecaseAssign.objects.select_related('user_email').filter(usecase__usecase_id=ucid) context = { 'usecase_details': usecase_details, "users": User.objects.all(), 'usecase_assigned': usecase_assigned } return render(request, 'UsecaseDetails.html', context)
- 用
usecase__usecase_id=ucid替代错误的usecase_id=ucid,正确关联Usecase模型主键 select_related('user_email')预加载关联的User对象,提升查询性能- 移除
values_list和values,直接获取UsecaseAssign对象集合,保留关联关系
2. 修正模板中的遍历代码
修改模板中展示已分配用户的部分:
<ul class="list-group list-group-flush"> <li class="list-group-item d-flex align-items-center justify-content-between px-0 border-bottom"> <div> <p class="pe-4">Assigned users:</p> {% for assign in usecase_assigned %} <p class="pe-4">{{ assign.user_email.user_name }}</p> {% endfor %} </div> </li> </ul>
- 通过
assign.user_email.user_name访问关联User模型的用户名(UsecaseAssign的外键字段名为user_email,指向User模型)
可选优化:模型字段名规范
为提升代码可读性,建议修改UsecaseAssign的字段名:
class UsecaseAssign(models.Model): usecase_assign_date = models.DateTimeField(primary_key=True) usecase = models.ForeignKey(Usecase, models.DO_NOTHING) user = models.ForeignKey('User', models.DO_NOTHING, db_column='user_email')
修改后,views和模板中的访问路径对应改为assign.user.user_name,逻辑更直观。
内容的提问来源于stack exchange,提问作者JHS99
相关产品推荐
相关产品推荐

