Как проверить наличие записи в модели от текущего аутентифицированного пользователя в шаблоне Django? - PullRequest
1 голос
/ 26 февраля 2020

Код ниже проверяет, добавил ли пользователь товар в корзину или нет. Если он добавлен в корзину этим текущим пользователем, он должен показать кнопку 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 ссылка . Спасибо

1 Ответ

0 голосов
/ 26 февраля 2020

Вам нужно {% empty %} здесь:

{% for ordereditem in item.ordereditems_set.all %}
    ...
{% empty %}
    No items
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...