Django - TypeError - 字段 'id' 需要一个数字,但得到 <WSGIRequest: GET '/marketplace/add_to_cart/5/'>

时间:2021-01-11 08:41:34

标签: django cart

我对 Django 还很陌生,在尝试为我的电子购物网站实施购物车时遇到了问题。当我调用我的“add_to_cart”函数时,我想确定是否存在此会话的购物车,以及此购物车中是否已有所选商品的参考。

这是我的models.py:

CART_ID = 'CART-ID'

class Cart(models.Model):
        creation_datetime       = models.DateTimeField(auto_now_add=True)
        update_datetime         = models.DateTimeField(auto_now=True)
        checked_out             = models.BooleanField(default=False)
        user                    = models.ForeignKey(User,on_delete=models.DO_NOTHING, null=True, blank=True)

        @classmethod
        def create(cls):
                cart_id = request.session.get(CART_ID)
                if cart_id:
                        cart = models.Cart.objects.filter(id=cart_id, checked_out=False).first()
                        if cart is None:
                                cart = cls()
                                request.session[CART_ID] = cart.id
                else:
                        cart = cls()
                        request.session[CART_ID] = cart.id
                return cart

        def add(self, article, prix_unitaire, quantite=1):
                item = Item.objects.filter(cart_id=self.id, article=article).first()
                if item:
                        item.prix_unitaire = prix_unitaire
                        item.quantite += int(quantite)
                        item.save()
                else:
                        Item.objects.create(cart_id=self.id, article=article, prix_unitaire=prix_unitaire, quantite=quantite)

class Item(models.Model):
        cart            = models.ForeignKey(Cart, on_delete=models.CASCADE)
        article         = models.ForeignKey(Article, on_delete=models.CASCADE)
        quantite        = models.PositiveIntegerField()
        prix_unitaire   = models.PositiveIntegerField()

        def prix_total(self):
                return self.quantite * self.prix_unitaire
                prix_total = property(prix_total)

在我的 views.py 中,我定义了我的“add_to_cart”函数:

def add_to_cart(request, pk, quantite=1):
        article = Article.objects.get(pk=pk)
        cart    = Cart(request)
        cart.add(article, article.prix_unitaire, quantite)

和我的 urls.py

urlpatterns = [
...
        path('add_to_cart/<int:pk>/', add_to_cart, name='add_to_cart'),

当我调用该函数时,出现此错误:

TypeError at /marketplace/add_to_cart/5/
Field 'id' expected a number but got <WSGIRequest: GET '/marketplace/add_to_cart/5/'>.

在堆栈中,我突出显示了这一点:

/home/max/elien_dev/ELIEN_MARKETPLACE/models.py, line 85, in add
        item = Item.objects.filter(cart_id=self.id, article=article).first() …
▼ Local vars
Variable        Value
article         <Article: Article object (5)>
prix_unitaire   400
quantite        1
self            <Cart: Cart object (<WSGIRequest: GET '/marketplace/add_to_cart/5/'>)>

在我尝试检查该商品是否已在购物车中时,我似乎没有按应有的方式引用我的购物车。尝试过“cart=self”和其他东西,但我想我在这里错过了一个更深的点。有什么想法吗?

无论如何感谢您阅读本文!

0 个答案:

没有答案