Python 每次我注销&;重新登录创建的新购物车,Django购物车应用程序

Python 每次我注销&;重新登录创建的新购物车,Django购物车应用程序,python,django,cart,Python,Django,Cart,我是Django的新手!我试图让未经验证的用户将产品添加到购物车。当他们登录并刷新购物车时,购物车与用户关联。但问题是对于经过身份验证的用户。当经过身份验证的用户注销并重新登录时,将为他创建一个新的购物车。这是我的功能,它检查我是否需要制作新购物车或获取现有购物车 def new_or_get(self, request): cart_id = request.session.get("cart_id", None) qs = self.get_queryset().filter

我是Django的新手!我试图让未经验证的用户将产品添加到购物车。当他们登录并刷新购物车时,购物车与用户关联。但问题是对于经过身份验证的用户。当经过身份验证的用户注销并重新登录时,将为他创建一个新的购物车。这是我的功能,它检查我是否需要制作新购物车或获取现有购物车

def new_or_get(self, request):
    cart_id = request.session.get("cart_id", None)
    qs = self.get_queryset().filter(id=cart_id)
    if qs.count() == 1:
       new_obj = False
       cart_obj = qs.first()
       if request.user.is_authenticated() and cart_obj.user is None:
           cart_obj.user = request.user
           cart_obj.save()
       else:
           cart_obj = Cart.objects.create(user=request.user)
           new_obj = True
           request.session['cart_id'] = cart_obj.id
       return cart_obj, new_obj

您应该将用户添加到筛选器中,以确保用户获得他们的购物车,因为您将用户链接到购物车

def new_or_get(self, request):
    cart_id = request.session.get("cart_id", None)
    filter_kwargs = {'id': card_id}
    if request.user.is_authenticated():
        filter_kwargs.update({'user': request.user})

    qs = self.get_queryset().filter(**filter_kwargs)
    if qs.count() == 1:
       new_obj = False
       cart_obj = qs.first()
       if request.user.is_authenticated() and cart_obj.user is None:
           cart_obj.user = request.user
           cart_obj.save()
       else:
           cart_obj = Cart.objects.create(user=request.user)
           new_obj = True
           request.session['cart_id'] = cart_obj.id
       return cart_obj, new_obj
您还可以在模型上查看django helper方法,该方法可能会对您起到类似的作用

def new_or_get(self, request):
    cart_id = request.session.get("cart_id", None)
    filter_kwargs = {'id': card_id}
    if request.user.is_authenticated():
        filter_kwargs.update({'user': request.user})

    cart_obj, created = Cart.objects.get_or_create(**filter_kwargs)

    if request.user.is_authenticated() and cart_obj.user is None:
       cart_obj.user = request.user
       cart_obj.save()

   request.session['cart_id'] = cart_obj.id
   return cart_obj, created
检查这里的文件