Интернет-магазин в django. Как выводить в профиле и фильтровать заказы пользователя?

У меня есть несколько моделей. Модель Заказа(Order), модель товара в заказе(OrderItem), а также есть модель пользователя (User)

Order models:

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.PROTECT, related_name='orders', verbose_name="Заказы")
    first_name = models.CharField('Имя', max_length=50)
    last_name = models.CharField('Фамилия', max_length=50)
    email = models.EmailField()
    phone = models.CharField('Телефон', max_length=50, default='')
    address = models.CharField('Адрес', max_length=250)
    postal_code = models.CharField('Почтовый индекс', max_length=20)
    city = models.CharField('Населенный пункт', max_length=100)
    created = models.DateTimeField('Создано', auto_now_add=True)
    updated = models.DateTimeField('Обновлено', auto_now=True)
    paid = models.BooleanField('Оплачено', default=False)
    coupon = models.ForeignKey(Coupon, related_name='orders', verbose_name="Купон", null=True, blank=True,
                               on_delete=models.SET_NULL)
    discount = models.IntegerField('Размер скидки %', default=0,
                                   validators=[MinValueValidator(0), MaxValueValidator(100)])

    class Meta:
        ordering = ('-created',)
        verbose_name = 'Заказ'
        verbose_name_plural = lazy(
            lambda: _('Заказы ({})').format(Order.objects.count()), str)()

    def __str__(self):
        return 'Order {}'.format(self.id)

    def get_total_cost(self):
        total_cost = sum(item.get_cost() for item in self.items.all())
        return total_cost - total_cost * (self.discount / Decimal('100'))


class OrderItem(models.Model):
    order = models.ForeignKey(
        Order, related_name='items', on_delete=models.CASCADE)
    book = models.ForeignKey(Book, verbose_name="Книги",
                             related_name='order_items', on_delete=models.CASCADE)
    price = models.DecimalField('Цена', max_digits=10, decimal_places=2)
    quantity = models.PositiveIntegerField('Количество', default=1)

    def __str__(self):
        return '{}'.format(self.id)

    def get_cost(self):
        return self.price * self.quantity

Profile views:

@login_required
def profile(request):
    myorders = Order.objects.filter(user=request.user)
    if request.method == "POST":
        img_profile = ProfileImage(
            request.POST, request.FILES, instance=request.user.profile)
        update_user = UserUpdateForm(request.POST, instance=request.user)

        if update_user.is_valid() and img_profile.is_valid():
            update_user.save()
            img_profile.save()
            messages.add_message(request, settings.MY_INFO,
                                 f'Информация была успешно обновлена')
            return redirect('profile')
    else:
        img_profile = ProfileImage(instance=request.user.profile)
        update_user = UserUpdateForm(instance=request.user)

    data = {
        'img_profile': img_profile,
        'update_user': update_user
    }

    return render(request, 'users/profile.html', data)

Ответы (1 шт):

Автор решения: Andrey Maslov

ты же отфильтровал заказы пользователя myorders = Order.objects.filter(user=request.user) что бы вывести их в шаблоне передай из в контекст, так же как ты это делаешь с img_profile и update_user

    data = {
        'img_profile': img_profile,
        'update_user': update_user,
        'myorders': myorders,
    }

и используй дальше в шаблоне эту переменную

→ Ссылка