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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:13:09