我对 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”和其他东西,但我想我在这里错过了一个更深的点。有什么想法吗?
无论如何感谢您阅读本文!