Фильтр False в списке булевых чисел

У меня есть пять объектов Product, в которых доступность 3 продуктов установлена на True, а остальных на False, я пытаюсь установить кнопку Checkout Status Button на Out of Stock, даже если у одного продукта доступность установлена на False.

Поскольку представление корзины не может использовать slug, {% if product.availability %} бессмысленно, и не может использовать 'for loop', иначе это создаст несколько кнопок оформления заказа, как это исправить?

Модель

class Product(models.Model):
    availablity = models.BooleanField()

View

def cart(request):
    products = Product.objects.all()

Шаблон корзины

{% for product in products %}
    <p>{product.name}</p>
    <p>{product.price}</p>
{% endfor %}


<!--Checkout Status Button-->
{% if product.availability %}
    <a href="#">Checkout</a>
{% else %}
    <p>Out of stock</p>
{% endif %}
def cart(request):
    products = Product.objects.all()
    availibility = True
    for prod in products:
        if prod.availability = False:
           availability = False
           break
    context = { "products" :products, "availability" :availability }

в Html

if availability` True  then show `Checkout` else `Out of Stock`

В представлении корзины вы могли бы добавить контекстный словарь к вызову render()? Так что в основном :

  • Проверьте products условие доступности и установите переменную available в True/False
  • .
  • измените вызов рендеринга на render(cart_template, {'products' : products, 'available' : available})
  • измените шаблон корзины на {% if available %}

Вы должны сделать все вычисления в view и отправить только один True/False в шаблон.

Например

products = Product.objects.all()

available = all(x.availability for x in products)

context = {..., "available": available}
{% if available %}
    <a href="#">Checkout</a>
{% else %}
    <p>Out of stock</p>
{% endif %}
Вернуться на верх