Django CreateView提交表单后无法重定向返回None报错求助
问题根源
你的报错由两个可修复的问题导致:
- 重写
form_valid方法时未返回父类方法的执行结果,Django要求类视图的form_valid必须返回HttpResponse对象,你仅调用了super().form_valid(form)但没有返回,所以方法最终返回None触发报错。 success_url写死相对路径不够稳妥,推荐使用Django内置的反向解析工具按路由name生成跳转地址,避免后续修改路由路径时需要同步改动视图代码。
修复后的PlansCreateView代码
from django.urls import reverse_lazy class PlansCreateView(LoginRequiredMixin, CreateView): model = Plan fields = ["title", "description", "date_deadline"] template_name = "work/plans_forms.html" # 用reverse_lazy反向解析路由name生成正确的跳转地址 success_url = reverse_lazy('work-plans') def form_valid(self, form): form.instance.supervisor = self.request.user # 必须返回父类form_valid方法的执行结果 return super().form_valid(form)
验证说明
修改后提交表单,Django会自动跳转到name为work-plans的计划列表页,之前Plan实例能成功创建是因为form_valid中保存实例的逻辑已经执行,只是最后重定向的响应没有被正确返回导致报错。
内容的提问来源于stack exchange,提问作者chai
相关产品推荐
相关产品推荐

