Как: 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%}
но я думаю, что есть другой, самый простой способ решить вашу проблему