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

如何在django-bootstrap-modal-forms提交成功后重定向至带动态ID的初始页面

解决django-bootstrap-modal-forms模态表单动态重定向问题

要实现POST成功后重定向到带动态场景ID的初始页面,不要用硬编码的success_url,而是重写视图的get_success_url方法,根据请求或保存的实例动态获取场景ID。

方案1:从请求参数中获取场景ID

如果打开模态框时,已经通过URL查询参数或表单隐藏字段传递了场景ID:

class EventCreateView(BSModalCreateView):
    template_name = 'form_scenario_event_create.html'
    form_class = SimulationEventForm
    success_message = 'Success: Event was added to the scenario.'

    def get_success_url(self):
        # 方式A:从URL查询参数获取(比如模态框链接是 /create-event/?scenario_ID=123)
        scenario_id = self.request.GET.get('scenario_ID')
        # 方式B:从表单隐藏字段获取(需在模板表单中添加隐藏input)
        # scenario_id = self.request.POST.get('scenario_ID')
        return reverse('detail_scenario', kwargs={'scenario_ID': scenario_id})

对应的模板隐藏字段示例:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="hidden" name="scenario_ID" value="{{ current_scenario.id }}">
    <button type="submit">确认添加</button>
</form>

方案2:从保存后的实例关联对象获取

如果你的SimulationEvent模型关联了SimulationScenario(比如有外键字段scenario),可以直接从保存后的事件实例中获取场景ID:

class EventCreateView(BSModalCreateView):
    template_name = 'form_scenario_event_create.html'
    form_class = SimulationEventForm
    success_message = 'Success: Event was added to the scenario.'

    def get_success_url(self):
        # 从已保存的事件实例中关联的场景获取ID
        scenario_id = self.object.scenario.id
        return reverse('detail_scenario', kwargs={'scenario_ID': scenario_id})

关键说明

  • 不能用reverse_lazy硬编码ID:因为reverse_lazy在类初始化时就会解析URL,只能用固定值,无法适应每次请求的动态ID。
  • get_success_url方法在表单验证通过、实例保存后调用,此时可以安全获取当前请求的参数或保存后的对象属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:53