django – ‘CheckoutView’对象没有属性’object’
发布时间:2020-12-20 12:38:27 所属栏目:Python 来源:网络整理
导读:我没有得到属性’对象’错误’ 这是views.py class CheckoutView(FormMixin,DetailView): model = Cart template_name = "carts/checkout_view.html" form_class = GuestCheckoutForm def get_object(self,*args,**kwargs): if self.request.user.is_authent
我没有得到属性’对象’错误’
这是views.py class CheckoutView(FormMixin,DetailView): model = Cart template_name = "carts/checkout_view.html" form_class = GuestCheckoutForm def get_object(self,*args,**kwargs): if self.request.user.is_authenticated(): try: cart = Cart.objects.get(user__username=self.request.user) except: cart = None if cart == None: HttpResponseRedirect(reverse("cart")) else: cart_id = self.request.session.get("cart_id") if cart_id == None: HttpResponseRedirect(reverse("cart")) cart = Cart.objects.get(id=cart_id) return cart def get_context_data(self,**kwargs): context = super(CheckoutView,self).get_context_data(*args,**kwargs) user_can_continue = False if not self.request.user.is_authenticated(): context["login_form"] = AuthenticationForm() context["next_url"] = self.request.build_absolute_uri() if self.request.user.is_authenticated(): user_can_continue = True context["user_can_continue"] = user_can_continue context["form"] = self.get_form() return context def post(self,request,**kwargs): form = self.get_form() if form.is_valid(): email = form.cleaned_data.get("email") return self.form_valid(form) else: return self.form_invalid(form) def get_success_url(self): return reverse('checkout') 这是模板 <form method="POST" action=""> {% csrf_token %} {{form | crispy }} <input type="submit" class="btn btn-success" value="continue"> </form> </div> 这是追溯 File "C:Python27libsite-packagesdjangocorehandlersbase.py" in get_response 132. response = wrapped_callback(request,*callback_args,**callback_kwargs) File "C:Python27libsite-packagesdjangoviewsgenericbase.py" in view 71. return self.dispatch(request,**kwargs) File "C:Python27libsite-packagesdjangoviewsgenericbase.py" in dispatch 89. return handler(request,**kwargs) File "C:UserslenovoDesktopplumpPlumpinsrccartsviews.py" in post 151. return self.form_invalid(form) File "C:Python27libsite-packagesdjangoviewsgenericedit.py" in form_invalid 115. return self.render_to_response(self.get_context_data(form=form)) File "C:UserslenovoDesktopplumpPlumpinsrccartsviews.py" in get_context_data 133. context = super(CheckoutView,**kwargs) File "C:Python27libsite-packagesdjangoviewsgenericdetail.py" in get_context_data 101. if self.object: Exception Type: AttributeError at /checkout/ Exception Value: 'CheckoutView' object has no attribute 'object' 我怎样才能解决上述问题? 谢谢 解决方法
您需要在视图的post方法中使用.get_object()将对象分配给视图.
这是因为Django的get_context_data()函数使用该对象将其传递到上下文中.如果POST请求出错,将调用此函数,它将查找您未分配的self.object,从而导致错误. class CheckoutView(FormMixin,DetailView): model = Cart template_name = "carts/checkout_view.html" form_class = GuestCheckoutForm ... def post(self,**kwargs): self.object = self.get_object() # assign the object to the view form = self.get_form() if form.is_valid(): email = form.cleaned_data.get("email") return self.form_valid(form) else: return self.form_invalid(form) 此外,最好在这里使用UpdateView而不是DetailView. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |