加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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方法提交表单,但我收到上述错误

谢谢

解决方法

您需要在视图的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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读