Как: For...Else в шаблоне Django (if/else внутри цикла for)

Заранее прошу прощения, если этот вопрос уже задавался, но я не смог найти ни одного ответа на проблему, которая у меня возникла:

Мне нужно сделать что-то похожее на цикл For...Else в шаблоне Django.

Мне нужно отобразить кнопку на шаблоне на основе условия if:

  • Если пользователь уже купил этот товар, покажите кнопку 1
  • .
  • Если пользователь не купил этот товар, то показать кнопку 2

Для каждого товара я должен просмотреть покупки пользователя, а затем показать одну или другую кнопку в зависимости от того, купил он уже этот товар или нет.

Упрощенная (и неправильная) версия кода будет выглядеть так:

{% for product in products %}
  //other code here

  {% for purchase in purchases %}
     {% if purchase.service_id.id == product.id %}
       // show button 1
     {% else %}
       // show button 2
     {% endif %}
  {% endfor %}

{% endfor %}

Однако этот код не работает, так как он показывает обе кнопки при прохождении цикла for.

Я не могу сделать For...Empty, потому что у пользователя могут быть другие покупки (поэтому цикл for не будет пустым), но ни одна из них не совпадает с этим товаром.

Заранее спасибо.

Вы можете создать другие модели, например, Profile

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    cart = models.MenyToManyField(Product, null=True)

поэтому в представлениях для кнопки byu можно написать так

def buy(request, pk): #byu button
    product = Product.objects.get(id=pk)
    profile = Profile.objects.filter(user.username=request.user)
    profile.cart.add(product.id)
    return redirect('some html')

у другой кнопки то же самое

def index(request, pk): # for template
    product = Product.objects.get(id=pk)
    profile = Profile.objects.filter(user.username=request.user)
    return response(request, 'some html', context)

so template

{% for i in product%}
 {% for products in profile%}
     {% for p in products.cart.all %}
       {% if i.id in p.id%}
       <p>you bought</p>
       {% else %}
        <a href='byu'>Buy</a>
       {% endif %}
      {% endfor%}
    {% endfor%}
 {% endfor%}

но я думаю, что есть другой, самый простой способ решить вашу проблему

Вернуться на верх