在django中使用FormView,success_url死活不能生效的问题

真的不知道是怎么回事,

以前都是手动的,

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())

 

转载于:https://www.cnblogs.com/aguncn/p/10256308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值