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

在Django中提交表单后如何重定向至另一表单?

在Django中提交表单后重定向到另一个表单的方法

嘿,我来帮你搞定这个问题!在Django里实现提交表单后重定向到另一个表单,核心是在处理表单的视图函数里,当表单验证通过并保存数据后,使用redirect()函数跳转到目标表单的URL。下面一步步给你说清楚:

1. 编写处理当前表单的视图函数

假设你当前的表单是用来创建Incubators实例的,你需要在views.py里写一个视图来处理这个POST请求,我给你提供函数视图和类视图两种实现方式:

函数视图示例

from django.shortcuts import render, redirect
from .forms import IncubatorForm  # 假设你已经定义了对应模型的表单类
from .models import Incubators

def add_incubator(request):
    if request.method == 'POST':
        # 注意你的表单有文件上传,必须传入request.FILES
        form = IncubatorForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()  # 将数据保存到数据库
            # 重定向到目标表单的URL名称(推荐用名称,后续路径修改更方便)
            return redirect('add_another_form')
    else:
        form = IncubatorForm()
    return render(request, '你的模板文件名.html', {'form': form})

类视图(CreateView)示例

如果习惯用类视图,可以重写get_success_url方法来指定跳转目标:

from django.views.generic.edit import CreateView
from .models import Incubators
from .forms import IncubatorForm
from django.urls import reverse_lazy

class IncubatorCreateView(CreateView):
    model = Incubators
    form_class = IncubatorForm
    template_name = '你的模板文件名.html'
    # 用reverse_lazy延迟解析URL,避免类加载时URLconf未初始化的问题
    success_url = reverse_lazy('add_another_form')

2. 配置目标表单的视图与URL

你需要确保另一个表单有对应的视图和URL配置,举个简单的示例:

目标表单的视图

# views.py
from django.shortcuts import render, redirect
from .forms import OtherForm  # 目标表单的表单类

def add_another_form(request):
    if request.method == 'POST':
        form = OtherForm(request.POST)
        if form.is_valid():
            form.save()
            # 这里可以继续重定向到成功页或者其他页面
            return redirect('success_page')
    else:
        form = OtherForm()
    return render(request, '目标表单模板.html', {'form': form})

URL配置(urls.py)

把两个视图都添加到URLconf里,并给它们命名,这样redirect()可以通过名称快速跳转:

from django.urls import path
from . import views

urlpatterns = [
    # 原表单的URL
    path('add-incubator/', views.add_incubator, name='add_incubator'),
    # 目标表单的URL(对应上面代码里的'add_another_form'名称)
    path('add-another/', views.add_another_form, name='add_another_form'),
    # 如果用类视图,原表单的URL是这样的:
    # path('add-incubator/', views.IncubatorCreateView.as_view(), name='add_incubator'),
]

3. 关键注意事项

  • 因为你的表单包含enctype="multipart/form-data"(支持文件上传),所以处理POST请求时必须把request.FILES传给表单,否则文件数据会丢失。
  • 使用redirect()时,优先用URL名称而非硬编码路径,这样后续修改URL路径时不需要改动视图代码。
  • 类视图中指定success_url必须用reverse_lazy(),不能直接用reverse(),因为类加载时URLconf还未完全初始化。

这样设置后,用户提交「Add Incubator」表单且验证通过时,就会自动跳转到你指定的另一个表单页面啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:11