Как исправить функциональность добавления в корзину в django?
Я создаю платформу электронной коммерции и хочу создать функциональность добавления в корзину на сайте. Но по какой-то причине Id продукта отображается как null. Вот коды: models.py
class Products(models.Model):
seller = models.ForeignKey(SellerProfile, on_delete = models.CASCADE)
title = models.CharField(max_length = 255)
product_category = models.CharField(choices = CATEGORY_CHOICES, max_length = 100)
description = models.TextField()
price = models.FloatField(max_length= 5)
class Cart(models.Model):
buyer = models.ForeignKey(User, on_delete = models.CASCADE)
products = models.ForeignKey(Products, on_delete = models.CASCADE)
views.py
def add_cart(request):
product_id = Products.id
new_product = Cart.objects.get_or_create(id=product_id, user=request.user)
return redirect('/')
Когда я пытаюсь нажать на эту ссылку, она выдает мне эту ошибку: Поле 'id' ожидало число, но получило <django.db.models.query_utils.DeferredAttribute object at 0x000002468A4F8550>.
Любое предложение будет очень полезно.
Спасибо
Полагая, что у вас уже есть экземпляр Products, в таком случае
Запросить напрямую, например:
new_product = Cart.objects.get_or_create(products=Products)
Если вы хотите сделать запрос по product_id, сделайте это следующим образом:
product_id = Products.pk
new_product = Cart.objects.get_or_create(products_id=product_id)
Кроме того: request.user содержит словарь, вы не можете передать его непосредственно в query. А поле user имеет имя покупателя, поэтому измените запрос следующим образом:
product_id = Products.pk
new_product = Cart.objects.get_or_create(products=Products, buyer_id=request.user['pk'])
Наконец, я исправил это.
view.py
def add_to_cart(request, slug):
products = Products.objects.get(slug=slug)
ncart = Cart.objects.create(user=request.user., products=products)
ncart.save()
return redirect('/')
шаблон
<div class="product-wrapper">
<h1 style="font-size:24px">{{product.title}}</h1>
<div class="product-price">
<p style="text-decoration-line:line-through;">$ {{product.price}}</p>
<a href="{% url 'add-to-cart' product.slug %}">Add to cart<a>
</div>
urls.py
path('cart/add/<slug:slug>', views.add_to_cart, name = 'add-to-cart')