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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:15:03