Как мне получить весь список продуктов, которые были заказаны в шаблоне

как мне отфильтровать все объекты, связанные с "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_required decorator [Django-doc].

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