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

Django表单提交后触发模态框及清空重定向问题咨询

Django表单提交清空+模态框弹出解决方案

现有问题

  • 表单提交后没有执行重定向,直接返回了携带用户提交数据的form实例,导致表单无法清空,还会出现刷新页面重复提交的问题
  • GET请求时默认传入了successful_submit=True,成功标记的判断逻辑完全失效
  • 模态框调用方法可能和MDB组件的依赖不匹配,你使用的是MDB模态框,默认jQuery的.modal('show')写法不一定兼容原生MDB组件

修改方案

1. 调整views.py逻辑

核心是提交成功后重定向到表单页,用session临时存储提交成功标记,GET请求时返回空表单,同时读取并销毁成功标记:

def add__plan(request):
    if request.method == 'POST':
        form = infoForm(request.POST)
        if form.is_valid():
            form.save()
            _name = form.cleaned_data.get('Name')
            messages.success(request, f'PDF created for {_name}!')
            # 临时存储提交成功标记到session
            request.session['successful_submit'] = True
            # 重定向到表单页,触发GET请求返回空表单
            return redirect('plan:plan')

    # GET请求返回空表单
    else:
        form = infoForm()
    # 读取成功标记,读取后直接从session销毁,避免刷新页面重复触发弹窗
    successful_submit = request.session.pop('successful_submit', False)
    return render(request, 'plan/plan.html', {'form': form, 'successful_submit': successful_submit})

2. 调整模板JS逻辑

把模态框触发改成MDB原生写法,不需要依赖jQuery,兼容性更好:

{% if successful_submit %}
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
    // 原生MDB模态框触发逻辑
    const submitModal = new mdb.Modal(document.getElementById('exampleModal'));
    submitModal.show();
});
</script>
{% endif %}

可选简化方案:你已经引入了Django的messages组件,也可以不用session,直接在模板判断{% if messages %}就触发弹窗,逻辑更简洁。


效果验证

  • 提交后触发重定向,返回的是空表单实例,所有已填内容自动清空,刷新页面不会重复提交表单
  • 只有提交成功后才会携带成功标记,弹窗只会触发一次,刷新页面后标记已销毁,不会重复弹窗

内容的提问来源于stack exchange,提问作者A_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:57:00