Django应用预览区主经历未显示,如何实现主/附加经历同时展示?
问题分析与解决方案
你的问题核心出在experience_v视图的冗余逻辑错误,以及缺少同一用户仅保留一个主经历的约束,补充模板空值判断也能避免异常显示。
1. 修复experience_v视图的冗余逻辑
当前代码在保存主经历后,会复制用户所有现有经历(除刚保存的主经历)创建新条目,这不仅导致数据重复,还会干扰主经历的正常查询。需删除冗余代码并添加主经历唯一性约束:
修改后的experience_v函数:
@login_required def experience_v(request): if request.method == 'POST': form = ExperienceForm(request.POST) if form.is_valid(): # 将用户之前的主经历设为非主,确保同一用户仅存在一个主经历 experience.objects.filter(user=request.user, is_main_experience=True).update(is_main_experience=False) main_experience = form.save(commit=False) main_experience.user = request.user main_experience.is_main_experience = True main_experience.save() # 移除下面这段冗余的复制逻辑,避免生成重复数据 # additional_experiences = experience.objects.filter(user=request.user).exclude(pk=main_experience.pk) # for entry in additional_experiences: # exp = experience.objects.create( # user=request.user, # position=entry.position, # company=entry.company, # startdate=entry.startdate, # enddate=entry.enddate, # roles=entry.roles # ) return redirect('education') else: form = ExperienceForm() return render(request, 'experience.html', {'form': form})
关键修改说明:
- 添加主经历唯一性处理:每次提交新主经历时,自动将旧主经历标记为非主,避免多个主经历共存导致查询混乱。
- 删除冗余复制代码:这段逻辑完全不必要,会生成重复的附加经历数据。
2. 优化模板的空值判断
当前模板未对main_experience做存在性判断,若主经历查询为空,会显示空的内容区块。添加判断逻辑避免异常:
修改后的HTML代码:
<div class="preview-data"> <h2>Experience</h2> {% if main_experience %} <div class="experience-item"> <p><span class="bred">Position</span>: {{ main_experience.position }}</p> <p><span class="bred">Company</span>: {{ main_experience.company }}</p> <p><span class="bred">Start Date</span>: {{ main_experience.startdate }}</p> <p><span class="bred">End Date</span>: {{ main_experience.enddate }}</p> <br> <p><span class="bred">Roles</span>: {{ main_experience.roles }}</p> </div> {% endif %} {% for additional_experience in additional_experiences %} <div class="experience-item"> <p><span class="bred">Position</span>: {{ additional_experience.position }}</p> <p><span class="bred">Company</span>: {{ additional_experience.company }}</p> <p><span class="bred">Start Date</span>: {{ additional_experience.startdate }}</p> <p><span class="bred">End Date</span>: {{ additional_experience.enddate }}</p> <br> <p><span class="bred">Roles</span>: {{ additional_experience.roles }}</p> </div> {% endfor %} </div>
关键修改说明:
- 用
{% if main_experience %}包裹主经历展示区块,确保仅当主经历存在时才渲染内容。
3. 验证模型字段设置
确保experience模型中的is_main_experience字段是布尔类型,且默认值为False,这样新创建的附加经历不会被误标记为主经历。
完成以上修改后,主经历和附加经历就能正常在预览区同时显示了。
内容的提问来源于stack exchange,提问作者developer-re
相关产品推荐
相关产品推荐

