Как мне получить весь список продуктов, которые были заказаны в шаблоне
как мне отфильтровать все объекты, связанные с "orderitem" для определенного пользователя, так что когда кто-то заказывает несколько продуктов, я хочу показать заказанные продукты в шаблоне, прямо сейчас я получаю "The QuerySet value for an exact lookup must be limited to one result using slicing". буду очень признателен за помощь, thx!
models.py
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
class Product(models.Model):
name = models.CharField(max_length=150)
description = models.TextField()
views.py
def orders(request):
if request.user.is_authenticated:
customer = request.user.customer
orders = Order.objects.filter(customer=customer)
orderitems = OrderItem.objects.filter(order=orders)
else:
print('error')
context = {"orderitems": orderitems}
return render(request, 'accounts/orders.html', context)
HTML
{% for orderitem in orderitems %}
<div class="ordered-view">
<div class="order">{{ orderitem.product.name }}</div>
<div class="date">dummydata</div>
<div class="status">dummydata</div>
<div class="total">dummydata</div>
</div>
{% endfor %}
Вы фильтруете с:
from django.contrib.auth.decorators import login_required
@login_required
def orders(request):
orderitems = OrderItem.objects.filter(
order__customer__user=request.user
).select_related('product')
context = {'orderitems': orderitems}
return render(request, 'accounts/orders.html', context)
Предложение .select_related(…) [Django-doc] позволит избежать обращения к базе данных каждый раз, когда вы получаете .product из orderitem.
Note: You can limit views to a view to authenticated users with the
@login_requireddecorator [Django-doc].