Django Form提交后无法保存到PostgreSQL数据库问题求助
问题修复方案
核心问题出在文件上传逻辑缺失、表单参数传递错误两方面,按以下步骤修改即可:
1. 修复前端模板表单属性
你的表单包含图片上传字段,必须添加enctype="multipart/form-data"属性才能正确传递文件和表单数据,修改<form>标签如下:
<form method="POST" action="" autocomplete="off" enctype="multipart/form-data">
其余模板代码保持不变即可。
2. 修复视图函数表单实例化逻辑
Django处理带文件的表单时,需要同时传入request.POST(普通表单字段)和request.FILES(文件字段)两个参数,同时增加验证失败的错误返回逻辑,避免看不到报错直接跳转。修改后的EngineerForm视图代码如下:
def EngineerForm(request): if request.method == "GET": form = EngForm() return render(request, "Engineers/eform.html", {'form':form}) else: # 增加request.FILES参数 form = EngForm(request.POST, request.FILES) if form.is_valid(): form.save() return redirect('/engineer/') # 验证失败时返回带错误的表单,页面会显示具体报错原因 return render(request, "Engineers/eform.html", {'form':form})
3. 可选:修复模型字段定义错误(避免后续报错)
你的模型中face字段的height_field和width_field参数使用错误,这两个参数需要传入模型中用来存储高度、宽度的整数字段名,不能直接填像素数值。如果不需要存储图片尺寸,直接删除这两个参数即可:
# 原错误写法 face = models.ImageField(upload_to='', height_field=15, width_field=9) # 修改后写法 face = models.ImageField(upload_to='', blank=True)
另外建议将phone字段从IntegerField改为CharField(max_length=20),避免手机号带前置0、特殊符号时无法存储。
修改完成后重新提交表单即可正常写入数据,如果还有报错,表单页面会直接显示具体的验证失败原因,按提示调整即可。
内容的提问来源于stack exchange,提问作者Oreximena
相关产品推荐
相关产品推荐

