Как нацелить атрибут ForeignKey внутри цикла?

У меня есть представление корзины, и когда пользователь аутентифицирован и имеет товары в представлении корзины, я хочу проверить наличие товара и если найден один товар с наличием, установленным в False, я хочу вывести "Нет в наличии", код для не аутентифицированных пользователей работает, но для аутентифицированных пользователей Traceback Error is 'OrderItem' object has no attribute 'availability'

Модели

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

class OrderItem(models.Model):
    product = models.ForeignKey(Product)
    order = models.ForeignKey(Order)

Виды

def cart(request):
    data = cartData(request)
    items = data['items']

    orderitemlist = OrderItem.objects.all()

    if not request.user.is_authenticated:
        available = all(x['product']['availability'] for x in items)
    else:
        available = all(x.availability for x in orderitemlist)

    context = {"items": items, 'available': available}

Шаблон

{% if available %}
    <a href="#">Checkout</a>
{% else %}
    <p>Out of stock</p>
{% endif %}

Вы проверяете наличие товара, поэтому:

def cart(request):
    data = cartData(request)
    items = data['items']

    orderitemlist = OrderItem.objects.select_related('product')

    if not request.user.is_authenticated:
        available = all(x['product']['availability'] for x in items)
    else:
        available = all(x.product.availability for x in orderitemlist)

    context = {'items': items, 'available': available}

Пункт .select_related(…) [Django-doc] не является действительно необходимым, но позволяет получить все продукты в одном запросе и тем самым ускорить обработку.

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