All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 31s
42 lines
1.7 KiB
Python
42 lines
1.7 KiB
Python
from rest_framework import serializers
|
|
from .models import Cart, CartItem, Order, OrderItem
|
|
from products.serializers import ProductSerializer
|
|
|
|
class CartItemSerializer(serializers.ModelSerializer):
|
|
product = ProductSerializer(read_only=True)
|
|
product_id = serializers.IntegerField(write_only=True)
|
|
subtotal = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = CartItem
|
|
fields = ['id', 'product', 'product_id', 'quantity', 'price_at_add', 'subtotal']
|
|
|
|
def get_subtotal(self, obj):
|
|
return obj.quantity * obj.price_at_add
|
|
|
|
class CartSerializer(serializers.ModelSerializer):
|
|
items = CartItemSerializer(many=True, read_only=True)
|
|
total_price = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Cart
|
|
fields = ['id', 'items', 'total_price']
|
|
|
|
def get_total_price(self, obj):
|
|
return sum(item.quantity * item.price_at_add for item in obj.items.all())
|
|
|
|
class OrderItemSerializer(serializers.ModelSerializer):
|
|
product_title = serializers.CharField(source='product.title', read_only=True)
|
|
product_image = serializers.CharField(source='product.image_url', read_only=True)
|
|
|
|
class Meta:
|
|
model = OrderItem
|
|
fields = ['id', 'product', 'product_title', 'product_image', 'quantity', 'unit_price', 'tracking_number', 'carrier']
|
|
|
|
class OrderSerializer(serializers.ModelSerializer):
|
|
items = OrderItemSerializer(many=True, read_only=True)
|
|
username = serializers.CharField(source='user.username', read_only=True)
|
|
|
|
class Meta:
|
|
model = Order
|
|
fields = ['id', 'username', 'razorpay_order_id', 'razorpay_payment_id', 'total_amount', 'status', 'shipping_address', 'placed_at', 'items']
|