Я хочу проверить, существуют ли продукты на странице категории в корзине, а затем показать добавленный значок на веб-странице, используя django и jinja - PullRequest
0 голосов
/ 02 августа 2020

У меня есть страница категории (с несколькими продуктами, под которыми есть кнопка «Добавить в корзину»), на которой у меня есть кнопка «Добавить в корзину», но если этот продукт уже существует в корзине, я хочу вместо этого показать значок «Добавлено в корзину». Я не могу придумать, как это проверить. Вот мой models.py

class Order(models.Model):
    customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
    date_ordered=models.DateTimeField(auto_now_add=True)
    complete=models.BooleanField(default=False,null=True,blank=False)
    transaction_id=models.CharField(max_length=100,null=True)
class OrderItem(models.Model):
    product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True)
    order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True)
    quantity=models.IntegerField(default=0,null=True,blank=False)
    date_added=models.DateTimeField(auto_now_add=True)
class Product(models.Model):
    category = models.ForeignKey(Category, on_delete = models.CASCADE)
    productid=models.CharField(max_length=30)
    name=models.CharField(max_length=30)

А вот мой views.py

def category(request):
context = {
    'types' : Category.objects.all(),
    'prods': Product.objects.filter(),
    'cartItems':[],
    'in_cart': False,
    
}
if request.user.is_authenticated:
    customer=request.user.customer
    order, created=Order.objects.get_or_create(customer=customer, complete=False)
    cartItems=order.get_cart_items,     
    items=order.orderitem_set.all()
    context['in_cart'] =order.orderitem_set.filter(product__productid=id).exists()    
return render(request,"category.html",context)

А вот мой html код для этой кнопки

{% if user.is_authenticated %}
{% if in_cart %}
<button data-product={{product.id}} data-action="add"
class="btnabc btnabc-warning update-cart">Added</button>
 {% else %}
<button data-product={{product.id}} data-action="add"
class="btnabc btnabc-warning update-cart">Add to Cart</button>
{% endif %}
 {% else %}
<button class="btnabc btnabc-warning"><a href="/login/">Add to
Cart</a></button>
{% endif %}

Но, похоже, он не работает, даже если товара нет в корзине, он показывает Добавлено. Пожалуйста, предложите мне способ, чтобы по моему html коду я мог проверить, есть ли товар в корзине или нет и покажите кнопки соответственно. Любая помощь будет принята.

1 Ответ

1 голос
/ 02 августа 2020
context['list_cart'] = order.orderitem_set.values_list('product__id', flat=True)

список значений возвращает список с выбранным только полем (здесь product__id)

результат выглядит так [55, 88, 99, 123, 42 ...ect]

, поэтому в шаблоне вы можете искать, если продукт. id находится в списке

html:

{% if product.id in list_cart %}
    this id already in cart
{% else %}
    add to cart
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...