Подсчет общей суммы корзины в 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']