Django CreateView保存数据报错:未返回HttpResponse,success_url不生效
问题原因
你重写CreateView的form_valid方法时没有返回HttpResponse对象,导致Django判定视图返回内容无效。
原生form_valid方法完成数据保存逻辑后,会自动跳转至你配置的success_url或模型get_absolute_url对应的地址,你自定义该方法时只保留了数据保存的逻辑,丢失了原生方法的返回逻辑,所以才会触发报错,并不是success_url和get_absolute_url配置不生效。
数据成功入库是因为你手动调用了self.object.save(),这步逻辑在报错前已经执行完成。
解决方案
在你的form_valid方法末尾添加返回语句,调用父类原生的form_valid方法即可:
def form_valid(self, form): self.object = form.save(commit=False) self.object.user = self.request.user self.object.save() # 新增下面这行返回逻辑 return super().form_valid(form)
如果你需要自定义跳转逻辑,也可以手动返回重定向响应:
from django.shortcuts import redirect def form_valid(self, form): self.object = form.save(commit=False) self.object.user = self.request.user self.object.save() return redirect("home")
两种方案都可以正常触发跳转,你配置的success_url和get_absolute_url都可以正常生效。
内容的提问来源于stack exchange,提问作者user16375265
相关产品推荐
相关产品推荐

