Django使用HTMX时ModelForm无法提交数据到数据库问题求助
问题修复方案
1. 核心问题:表单提交路径错误
动态加载到父页面后,表单的action="."指向的是当前父页面的URL(即add_to_forecast对应的路由),该视图仅支持GET请求,所以POST请求不会被处理,自然不会写入数据。
修改account/lead_entry_forecast.html中的form标签,补充HTMX提交配置或者显式指定提交路径即可:
<form method="post" enctype="multipart/form-data" hx-post="{% url 'lead_entry_forecast' %}" hx-target="#leadform" hx-swap="beforeend">
该配置会让表单通过HTMX发送POST请求到正确的forecast_form视图路由,提交后将返回的新表单追加到#leadform容器中,实现多次添加功能。
2. 修复数据库存储逻辑
视图函数中调用了form.save(commit=False)但没有执行实际的数据库写入操作,该方法只会生成模型实例不会写入库,需要补充保存逻辑:
@login_required def forecast_form(request): if request.method=='POST': form = LeadEntryForm(data=request.POST or None) if form.is_valid(): # 补充.save()完成数据库写入,如果不需要修改实例可以直接去掉commit=False参数 form.save() messages.success(request,"Successful Submission") # 支持多次添加,验证通过后返回空表单即可 lead_id = request.session['lead_id'] context = {"form":LeadEntryForm(initial={'lead_id':lead_id})} return render(request, 'account/lead_entry_forecast.html', context) lead_id = request.session['lead_id'] data = {'lead_id':lead_id} context = {"form":LeadEntryForm(initial=data)} return render(request, 'account/lead_entry_forecast.html', context)
3. 可选优化
- 修复
LeadEntry模型中est_revenue属性的拼写错误:将probabiity改为probability - 如果需要提交后清空当前表单,可在form标签中补充
hx-on::after-request="this.reset()"属性 - 确认base.html中已正确引入HTMX的本地脚本资源
- 若需要提交后整页跳转,可在视图的POST处理逻辑中添加HX-Redirect响应头实现跳转
内容的提问来源于stack exchange,提问作者Francisco Colina
相关产品推荐
相关产品推荐

