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

Django中点击Add按钮保存表单数据并返回上一页的实现求助

解决表单保存后返回上一页的问题

我来帮你搞定这个问题!你的代码里有几个关键问题导致功能失效,我一步步给你修正:

首先修正模板文件(template.html)

原模板里的表单结构有问题——name="next"的隐藏输入框和提交按钮都放在了<form>标签外面,这会导致表单提交时无法携带这些数据,而且HTML结构也不合法。调整后的代码如下:

<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">Add your own Category</h3>
    </div>
    <div class="panel-body">
        <form method="POST" class="post-form">
            {% csrf_token %}
            {{ form.as_p }}
            <!-- 把隐藏输入框和按钮移到form内部 -->
            <input type="hidden" name="next" value="{{ request.META.HTTP_REFERER }}">
            <button type="submit" class="save btn btn-default">Add</button>
        </form>
    </div>
</div>

这里把next的值改成了request.META.HTTP_REFERER,它会直接获取上一页的URL,比用request.path更准确,当然如果你有特定需求也可以改回原来的写法。

然后修正视图文件(views.py)

原视图的写法完全不符合CreateView的规范,你在form_valid里嵌套了一个无用的category函数,这根本不会执行。正确的做法是重写form_valid方法,完成数据保存后,根据next参数重定向:

from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseRedirect
from .models import Category
from .forms import CategoryForm

class CustomCategory(LoginRequiredMixin, CreateView):
    model = Category
    form_class = CategoryForm

    def form_valid(self, form):
        # 保存表单数据
        obj = form.save(commit=False)
        # 如果你需要给对象添加额外字段(比如关联当前用户),可以在这里操作
        # obj.user = self.request.user
        obj.save()
        
        # 获取next参数,默认重定向到首页
        next_url = self.request.POST.get('next', '/')
        return HttpResponseRedirect(next_url)

关键说明

  1. 模板结构修正:确保所有表单相关元素都在<form>标签内部,否则浏览器不会把它们作为表单数据提交。
  2. 视图逻辑修正:CreateView的form_valid方法默认会重定向到新建对象的详情页,我们重写它来实现自定义的重定向逻辑,先保存数据,再根据next参数跳回上一页。
  3. next参数的获取:用request.POST.get('next', '/')可以避免next参数不存在时出现错误,默认跳转到首页。

这样修改后,点击“Add”按钮就能正确保存表单数据,然后自动返回上一页啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:19