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

Django CreateView上下文数据未更新,提交后模态框无法保持开启问题

问题根本原因

CreateView父类的form_valid方法默认会执行POST重定向GET(PRG)逻辑,你在post/form_valid中修改的self.successful_submit仅属于当前POST请求的类实例,重定向后会触发全新的GET请求,类实例会重新初始化,successful_submit会重置为初始值False,所以模板始终拿不到True的状态。

两种无需修改urls.py的解决方案

方案1:取消重定向,同请求直接返回渲染结果

适合不需要避免重复提交的场景,直接在表单验证通过后返回当前模板,不触发跳转:

class MescData(CreateView):
    model = Mesc
    form_class = MescForm
    template_name = 'Materials/mesc_data.html'

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        # 把标记默认值放到context里统一管理,不用定义类属性
        context['successful_submit'] = kwargs.pop('successful_submit', False)
        return context

    def get_success_url(self):
        return reverse('mesc')

    def form_valid(self, form, **kwargs):
        # 先保存表单数据
        form.save()
        # 直接构建context返回,传递成功标记
        return self.render_to_response(
            self.get_context_data(
                successful_submit=True,
                form=self.form_class() # 加这行提交后清空表单,不需要可以删掉
            )
        )

方案2:用session存储状态,兼容PRG模式

适合需要避免用户刷新页面重复提交表单的场景,提交后走正常重定向,通过session临时存储提交状态:

class MescData(CreateView):
    model = Mesc
    form_class = MescForm
    template_name = 'Materials/mesc_data.html'

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        # 从session取状态,pop操作会取出后删除该键,保证状态仅生效一次
        context['successful_submit'] = self.request.session.pop('successful_submit', False)
        return context

    def get_success_url(self):
        return reverse('mesc')

    def form_valid(self, form, **kwargs):
        # 提交成功后给session存标记
        self.request.session['successful_submit'] = True
        return super().form_valid(form, **kwargs)

模态框保持开启的配套处理

模板中拿到成功标记后,用JS控制Bootstrap模态框保持显示即可,示例:

{% if successful_submit %}
<script>
// 替换成你自己的模态框ID
$('#mesc-form-modal').modal('show');
</script>
{% endif %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:00