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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:06:07