Как нацелить атрибут 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] не является действительно необходимым, но позволяет получить все продукты в одном запросе и тем самым ускорить обработку.