Django开发:如何在Views.py中返回用户已完成的模型表单?
问题解决:在Django中返回已填写的模型表单
你的核心问题是没有将已存在的数据库实例传入ModelForm,导致不管条件如何都渲染空表单。以下是具体修正方案:
错误原因
当前代码中,即使检测到用户有已完成的Direct实例,你仍然创建了一个空的CompanyDirectApplication表单,没有关联到已有的数据记录,所以模板渲染的始终是空表单。
修正后的views.py代码
方式一:使用get_or_create简化逻辑
direct_instance, created = Direct.objects.get_or_create( user=request.user, defaults={'further_details_required': 'No'} # 实例不存在时的默认值 ) # 如果实例存在且符合条件,传入实例生成带数据的表单;否则返回空表单 if not created and direct_instance.further_details_required == "Yes": form = CompanyDirectApplication(instance=direct_instance) else: form = CompanyDirectApplication() return render(request, 'direct_application.html', {'form': form})
方式二:基于你原有的if-exists逻辑修改
if Direct.objects.filter(further_details_required="Yes", user=request.user).exists(): # 关键:获取已有的实例并传入表单的instance参数 direct_instance = Direct.objects.get(further_details_required="Yes", user=request.user) form = CompanyDirectApplication(instance=direct_instance) else: form = CompanyDirectApplication() return render(request, 'direct_application.html', {'form': form})
额外提示
你的models.py里存在拼写错误:further_details_required字段的hoices应改为choices,否则选项配置不会生效。
修改完成后,模板中的{{form.as_p}}就能正常渲染出已填写完成的表单数据。
内容的提问来源于stack exchange,提问作者Olney1
相关产品推荐
相关产品推荐

