Django ModelForm无报错但未插入数据问题排查求助
问题排查与修复方案
嘿,我帮你找出了几个导致表单提交后数据没插入数据库的关键问题,一起来修复:
1. 表单未处理文件上传(最核心原因)
你的模型里包含ImageField字段(dress_image1等),但模板中的表单没有开启文件上传支持,同时视图里也没接收上传的文件:
- 模板修复:给
<form>标签添加enctype="multipart/form-data"属性,这是上传文件必须的:
<form action="" method="post" name="AddDressForm" align="right" enctype="multipart/form-data">
- 视图修复:实例化表单时要同时传入
request.FILES,否则文件字段的数据会丢失,导致表单验证失败:
add_dress_form = AddDressForm(request.POST, request.FILES)
2. 视图中表单变量名不一致,导致错误提示无法显示
你在POST分支里用的是add_dress_form,但GET分支和模板里用的是add_cat_form,当表单验证失败时,你重新生成了一个空表单而不是把验证失败的表单传回去,所以你看不到任何错误提示,误以为表单提交成功了:
修改views里的POST分支else部分:
if request.method == "POST": add_dress_form = AddDressForm(request.POST, request.FILES) if add_dress_form.is_valid(): model_instance = add_dress_form.save(commit=False) model_instance.created_by = current_user model_instance.save() return redirect('home') else: # 把验证失败的表单传给模板,而不是新建空表单 add_cat_form = add_dress_form else: add_cat_form = AddDressForm()
3. 模型中on_delete参数错误
你的模型里外键字段的on_delete用了字符串'DO_NOTHING',但Django要求传入的是models模块下的常量,比如models.DO_NOTHING,否则会引发潜在错误:
修改models.py里的外键字段:
dress_size = models.ForeignKey(Size, on_delete=models.DO_NOTHING, verbose_name='مقاس الفستان') dress_color = models.ForeignKey(Color, on_delete=models.DO_NOTHING, verbose_name='لون الفستان') dress_action = models.ForeignKey(Action, on_delete=models.DO_NOTHING, verbose_name='الفستان معروض لل ', help_text='للبيع او للإيجار ')
4. 模板里的字段帮助文本拼写错误
模板里写的是{{ feild.help_text }},应该是{{ field.help_text }}(少了个'l'),这个不影响数据插入,但会导致帮助文本无法正常显示。
把这些修复之后,表单提交时就能正确处理文件上传,验证失败时也能看到错误提示,数据就能正常插入数据库啦!
内容的提问来源于stack exchange,提问作者Ahmed Wagdi
相关产品推荐
相关产品推荐

