from rest_framework import serializers from product.models import Product from product.serializers import ProductSerializer # CartItemSerializer artık hem dict (session) hem de model instance (db) ile çalışabilmeli. # Serializer'lar varsayılan olarak object attribute'larına erişir. # Dict erişimi için source kullanabiliriz veya to_representation override edebiliriz. # Ancak en temizi, view tarafında veriyi standart bir yapıya (list of dicts) dönüştürüp serializer'a vermektir. # Cart sınıfındaki __iter__ metodu zaten bunu yapıyor (hem DB hem Session için dict döndürüyor). # Bu yüzden mevcut serializer yapısını koruyabiliriz. class CartItemSerializer(serializers.Serializer): product = ProductSerializer(read_only=True) quantity = serializers.IntegerField() price = serializers.DecimalField(max_digits=10, decimal_places=2) total_price = serializers.DecimalField(max_digits=10, decimal_places=2) class CartSerializer(serializers.Serializer): items = CartItemSerializer(many=True, read_only=True) total_price = serializers.DecimalField(max_digits=10, decimal_places=2) class CartAddProductSerializer(serializers.Serializer): product_id = serializers.IntegerField() quantity = serializers.IntegerField(min_value=0, default=1) override_quantity = serializers.BooleanField(required=False, default=False)