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

Django基础View类调用success_url方法后重定向不生效问题

问题原因
  • 你虽然定义了get_success_url方法,但在表单校验通过的分支中没有调用该方法,也没有返回重定向响应,仍然返回了编辑页面的渲染结果,所以不会触发跳转。
  • Django中实现页面跳转需要返回HttpResponseRedirect类的响应,通常可以直接用django.shortcuts.redirect快捷方法生成该类响应。
修正方案
  1. 先确认你已经导入redirect方法:
from django.shortcuts import render, get_object_or_404, redirect
  1. 修改post方法的逻辑,表单校验保存成功后返回重定向响应,修正后的视图完整代码如下:
class ArticleUpdateView(View):
    template_name = 'articles/article_edit.html'
    
    def get_success_url(self):
        id = self.kwargs.get('id')
        return reverse('articles:article-detail', kwargs={'id': id})
    
    def get_object(self):
        id = self.kwargs.get('id')
        if id is not None:
            return get_object_or_404(Article, id=id)
        return None
    
    def get(self, request, id=None,  *args, **kwargs):
        context = {}
        obj = self.get_object()
        if obj is not None:
            form = ArticleModelForm(instance=obj)
            context['article'] = obj
            context['form'] = form
        return render(request, self.template_name, context)

    def post(self, request, id=None, *args, **kwargs):
        obj = self.get_object()
        if obj is None:
            # 可按需添加404处理逻辑
            return render(request, self.template_name, {})
        form = ArticleModelForm(request.POST, instance=obj)
        if form.is_valid():
            form.save()
            # 这里调用你写的get_success_url方法返回重定向地址
            return redirect(self.get_success_url())
            # 因为你模型已经定义了get_absolute_url,也可以简化写成 return redirect(obj) 效果完全一致
        # 表单校验失败才走渲染编辑页逻辑,回显错误信息
        context = {
            'article': obj,
            'form': form
        }
        return render(request, self.template_name, context)
补充说明

原生UpdateView内部已经封装了「表单校验通过后返回重定向响应」的逻辑,所以直接用的时候不需要自己写跳转,你用基础View实现就需要手动处理这一步的返回值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:06