26 lines
1.3 KiB
Python
26 lines
1.3 KiB
Python
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)
|