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

基于类的视图重定向失效:为何一个CreateView有效另一个无效?

CreateView重定向一个生效一个失效的原因分析

先看你提供的代码:

class LoveLetterCreateView(LoginRequiredMixin, CreateView):
    model = LoveLetter
    fields = '__all__'
    success_url = reverse_lazy('login') # 无效

class SignUpView(CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login') # 有效
    template_name = 'love_letters/signup.html'

核心原因大概率是LoveLetter表单未通过验证,导致CreateView没有执行重定向逻辑:

  1. SignUpView使用的UserCreationForm是Django内置表单,字段逻辑明确(用户名、两次密码),前端提交时基本能满足验证要求,表单验证通过后就会触发success_url重定向。
  2. LoveLetterCreateView用了fields='__all__',如果LoveLetter模型中存在必填字段(即blank=False且null=False的字段),但提交的表单未填写这些字段,就会导致表单验证失败。此时CreateView会重新渲染表单页面,不会执行重定向,看起来就像success_url无效。

另外,如果你重写get_success_url仍无效,进一步说明问题出在表单验证环节——只有表单验证通过,才会调用get_success_url方法。

解决步骤:

  • 在模板中添加表单错误提示:{{ form.errors }},查看具体的验证失败原因。
  • 检查LoveLetter模型的字段定义,确认是否有未被表单正确提交的必填字段,要么在表单中补充这些字段,要么修改模型字段为允许为空(设置blank=True)。
  • 可以在LoveLetterCreateView中重写form_valid方法,打印调试信息确认是否执行到该方法:
    def form_valid(self, form):
        print("表单验证通过,即将重定向")
        return super().form_valid(form)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:42:12