Подсчет общей суммы корзины в django rest framework

Я новичок в django, мне нужно рассчитать сумму корзины и у меня есть эти модели:

class Customer(Base):
    name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=100, blank=True, null=True)
    comments = models.CharField(max_length=255, blank=True, null=True)

class Cart(Base):
    user = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name="cart")
    cart_number = models.CharField(max_length=500, default=increment_cart_number, null=True, blank=True)
    total_summa = models.FloatField()
    is_saved = models.BooleanField(default=False)

class Item(Base):
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='items')
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product')
    product_price = models.FloatField()
    quantity = models.IntegerField(default=1)

Я использовал представление generics, могу ли я рассчитать cart summa следующим образом

Хлеб 3х6000 = 18000 Молоко 2х500 = 10000

Всего_Сумма = 28000

Помогите мне, пожалуйста?

Вы можете попробовать следующее, используя Sum и F выражение

from django.db.models import F, Sum
cart.total_summa = Item.objects.filter(cart=cart).annotate(per_item_price=F('product_price')*F('quantity')).annotate(total_summa=Sum('per_item_price'))

Внутри сериализаторов вы можете использовать следующий способ

class CartCreateSerializer(serializers.ModelSerializer): 
    total_summa = serializers.SerializerMethodField("get_total_summa", read_only=True)
    class Meta: 
        model = Cart 
        fields = [ 'id', 'user', 'cart_number', 'create_date', 'total_summa', 'time', 'is_saved']
    
    def get_total_summa(self, obj):
        return obj.items.annotate(per_item_price=F('product_price')*F('quantity')).annotate(total_summa=Sum('per_item_price'))['total_summa']
Вернуться на верх