真的不知道是怎么回事,
以前都是手动的,
form使用modelform。
view使用createview。
今天写新系统时,为了更灵活。
form使用form,(这样一来,可以在form是随便按数据库字段定义,而不一定需要数据库字段实例,且form里的东东,在html时可以引用,也可以模拟。但form本身的后端验证功能都能生效)
view使用formview。
在写完form_valid,定义了success_url之后,死活说我是返回none,没有返回httpresponse。
于是看了下源码,发现处理过程如下,form_valid之后,会调用HttpResponseRedirect(self.get_success_url()),
然后,get_success_url再去调用自身的success_url属性:
def form_valid(self, form): """If the form is valid, redirect to the supplied URL.""" return HttpResponseRedirect(self.get_success_url())
def get_success_url(self): """Return the URL to redirect to after processing a valid form.""" if not self.success_url: raise ImproperlyConfigured("No URL to redirect to. Provide a success_url.") return str(self.success_url) # success_url may be lazy
明白了这个调用链,于是,我只是自己手动写个form_valid的跳转了,这个使用super可以么?返回值错误么?
不解中,但先解决问题吧。
class OrderCreateView(FormView): template_name = 'order/order_create.html' form_class = OrderCreateForm success_url = reverse_lazy('order:list') def form_invalid(self, form): return render(self.request, {'form': form}) def form_valid(self, form): ... return HttpResponseRedirect(self.get_success_url())