Django简历生成器项目首页表单不显示仅见提交按钮如何解决
Django简历生成器表单不显示问题修复方案
根本原因
视图resumeFill向模板传递了personform、educationform等6个独立表单实例,但模板中仅调用了不存在的上下文变量{{ form.as_p }},因此无法渲染任何表单字段,仅能看到硬编码的提交按钮。
具体修复步骤
- 修正模板代码(resumefill.html)
替换原有模板的表单部分,渲染所有传入的表单实例,同时修正错误的表单提交路径:
- 修正模板代码(resumefill.html)
{% extends 'base.html' %} {% block content %} <form method="post" action="{% url 'resumefill' %}"> {% csrf_token %} {{ personform.as_p }} {{ experienceform.as_p }} {{ educationform.as_p }} {{ academicsform.as_p }} {{ skillsform.as_p }} {{ areaOfInterestform.as_p }} <input type="submit" value="Save" /> </form> {% endblock %}
如果需要首页直接访问显示该表单,可将应用内urls.py中的resumefill路由改为:
url(r'^$',views.resumeFill,name='resumefill'),
- 修正views.py中的代码问题
- 修复变量名拼写错误:
personform验证通过后原有代码写的是perform.save(),改为personform.save() - 补充外键关联逻辑:你的所有子模型(经历、教育背景等)都有指向Person的外键,直接保存子表单会报错,需要先保存Person实例,再绑定外键后保存其他表单,示例逻辑:
def resumeFill(request): template_name = 'resumefill.html' if request.method == "POST": personform = PersonForm(data=request.POST) educationform = EducationForm(data=request.POST) experienceform = ExperienceForm(data=request.POST) academicsform = AcademicsForm(data=request.POST) areaOfInterestform = AreaOfInterestForm(data=request.POST) skillsform = SkillsForm(data=request.POST) if personform.is_valid(): # 先保存person实例 person = personform.save() # 绑定外键后保存其他表单 if educationform.is_valid(): edu = educationform.save(commit=False) edu.person = person edu.save() if experienceform.is_valid(): exp = experienceform.save(commit=False) exp.person = person exp.save() if academicsform.is_valid(): aca = academicsform.save(commit=False) aca.person = person aca.save() if areaOfInterestform.is_valid(): interest = areaOfInterestform.save(commit=False) interest.person = person interest.save() if skillsform.is_valid(): skill = skillsform.save(commit=False) skill.person = person skill.save() # 验证失败的情况要返回带错误的表单实例,不要返回空表单 else: return render(request,template_name,{ 'personform':personform, 'educationform':educationform, 'experienceform':experienceform, 'academicsform':academicsform, 'areaOfInterestform':areaOfInterestform, 'skillsform':skillsform, }) # GET请求返回空表单 return render(request,template_name,{ 'personform':PersonForm(), 'educationform':EducationForm(), 'experienceform':ExperienceForm(), 'academicsform':AcademicsForm(), 'areaOfInterestform':AreaOfInterestForm(), 'skillsform':SkillsForm(), })
- 修正forms.py中的字段名拼写错误
- ExperienceForm的widgets中
work_choices改为work_choice,和模型字段名保持一致 - ExperienceForm的widgets中
End_duration改为end_duration,和模型字段名保持一致 - PersonForm的fields中新增
age字段,因为Person模型的age是必填项,否则提交表单会验证失败,或者给Person模型的age字段设置null=True, blank=True允许为空。
内容的提问来源于stack exchange,提问作者Manthanjain
相关产品推荐
相关产品推荐

