-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Expand file tree
/
Copy pathserializer.py
More file actions
29 lines (22 loc) · 857 Bytes
/
serializer.py
File metadata and controls
29 lines (22 loc) · 857 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from rest_framework import serializers # type: ignore
from .models import Product, Cart, CartItem
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class CartItemSerializer(serializers.ModelSerializer):
product = ProductSerializer()
total_price = serializers.SerializerMethodField()
class Meta:
model = CartItem
fields = ['id', 'product', 'quantity', 'total_price']
def get_total_price(self, obj):
return obj.total_price()
class CartSerializer(serializers.ModelSerializer):
items = CartItemSerializer(many=True)
total = serializers.SerializerMethodField()
class Meta:
model = Cart
fields = ['id', 'items', 'total']
def get_total(self, obj):
return sum(item.total_price() for item in obj.items.all())