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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:50:27