Код ниже проверяет, добавил ли пользователь товар в корзину или нет. Если он добавлен в корзину этим текущим пользователем, он должен показать кнопку remove from cart
, иначе он должен показать простую форму для добавления товара в корзину.
{% for ordereditem in item.ordereditems_set.all %}
{% if ordereditem.quantity > 0 and ordereditem.user.username == user.username %}
<a href="{{ item.get_remove_from_cart_url }}">Remove from cart</a>
{% elif not ordereditem %} # here!
<!-- else if there is no record of 'ordereditem' from current user show this form to add it to cart-->
<form class="d-flex justify-content-left" method="POST" action="{{ item.get_add_to_cart_url }}">
{% csrf_token %}
<input type="number" name="number" value="1">
<input type="submit" value="Add to cart">
</form>
{% endif %}
{% endfor %}
проблема заключается здесь {% elif not ordereditem %}
похоже, что мой текущий оператор if не соответствует ожидаемому условию. Я попытался использовать {% else %}
, но он по-прежнему показывает форму даже после добавления товара в корзину.
Вот как выглядят модели:
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
discount_price = models.DecimalField(max_digits=5,
decimal_places=2, verbose_name='Discount', null=True, blank=True)
image = models.ImageField(upload_to='products/%Y/%m/%d/')
image_cover = models.ImageField(upload_to='products/%Y/%m/%d/')
description = models.TextField()
slug = models.SlugField(max_length=150, blank=True, null=True)
category = models.CharField(max_length=15, choices=CATEGORY_CHOICE)
label = models.CharField(max_length=10, choices=LABEL_CHOICE)
associated_items = models.ManyToManyField("self", blank=True, null=True)
class OrderedItems(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
items = models.ManyToManyField(OrderedItems)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
Вот github ссылка . Спасибо