Детализация заказа/корзины с помощью функции annotate() [django]
У меня есть models
:
class Product(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
slug = models.SlugField()
description = models.TextField()
image = models.ImageField()
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE, null=True)
products = models.ManyToManyField(Products, through='OrderItem', related_name='orders')
being_delivered = models.BooleanField(default=False)
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='order_items')
quantity = models.IntegerField(default=1)
А у меня есть views
для создания Order и OrderItems, присоединенных к Order.
Мне нужно views
для cart/order_detail:
что я делаю:
def cart_detail(request):
order = Order.objects.filter(user=request.user)
order_item = OrderItem.objects.filter(order=order).annotate(???)
return render(request, 'cart/cart_detail.html', {'order':order, 'order_item':order_item})
Мне нужна помощь, как правильно отобразить в шаблоне - количество, единицы Товара, цену за единицу, общую цену.
Пожалуйста, любая помощь будет полезна. Любые ссылки или фрагменты кода.
from django.db.models import Sum, F
def cart_detail(request):
order = Order.objects.filter(user=request.user)
order_item = OrderItem.objects.filter(order=order).annotate(total=F('quantity') * F('product__price'))
total = order_item.aggregate(total=Sum(F('quantity') * F('product__price')))['total']
return render(request, 'cart/cart_detail.html', {'order':order, 'order_item':order_item, 'total':total})