Django模板中使用related_name无法显示用例进度日期的问题
用例进度日期显示空白问题修复及性能优化
问题背景
需开发页面展示所有用例信息及对应进度数据,但当前页面中进度日期显示为空白。
问题原因及修复步骤
1. 模板循环变量误用
模板中循环进度数据时,错误使用了usecase.usecaseids.all,需改为对应循环变量(如模板中遍历用例的变量为result)的result.usecaseids.all。
正确模板示例:
{% for result in usecase_details %} <div> <h3>{{ result.usecase_name }}</h3> <p>交付日期:{{ result.delivery_date }}</p> <!-- 循环展示对应进度数据 --> {% for progress in result.usecaseids.all %} <div> <p>进度日期:{{ progress.usecase_progress_date }}</p> <p>进度值:{{ progress.usecase_progress_value }}</p> </div> {% endfor %} </div> {% endfor %}
说明:usecaseids是UsecaseProgress模型中关联Usecase时设置的related_name,每个Usecase实例需通过自身的这个属性获取对应的进度集合,之前误用非当前循环实例的变量导致无法读取进度数据,进而日期显示空白。
2. 查询性能优化
原视图中直接使用Usecase.objects.all()会触发N+1查询(每获取一个用例单独查询一次进度数据),可通过prefetch_related预取关联的进度数据,减少数据库查询次数,提升页面加载性能。
修正后的views.py代码:
@user_login_required def view_usecase(request): # 预取关联的UsecaseProgress数据,避免N+1查询 usecase_details = Usecase.objects.all().prefetch_related('usecaseids') context = {'usecase_details': usecase_details} return render(request, 'ViewUsecase.html', context)
关联模型确认
两个模型的关联关系已正确配置:
Usecase模型为主模型UsecaseProgress模型通过usecase外键关联Usecase,并设置related_name='usecaseids',确保Usecase实例可通过该属性访问对应的进度记录
内容的提问来源于stack exchange,提问作者JHS99
相关产品推荐
相关产品推荐

