Files
hossein-por-shop/backend/order/serializers.py
T
2025-03-11 01:21:16 +03:30

77 lines
2.6 KiB
Python

from rest_framework import serializers
from .models import OrderItemModel, OrderModel, DiscountCode
from product.serializers import ProductVariantSerialzier
from account.serializers import UserAddressSerializer
class DiscountCodeSerializer(serializers.ModelSerializer):
class Meta:
model = DiscountCode
fields = ('code', 'percent')
read_only_fields = ('percent',)
class OrderItemSerailzier(serializers.ModelSerializer):
product = serializers.SerializerMethodField()
class Meta:
model = OrderItemModel
fields = "__all__"
read_only_fields = ('order', 'product')
def get_product(self, obj):
return ProductVariantSerialzier(instance=obj.product, context={'request': self.context.get('request')}).data
class CartSerializer(serializers.ModelSerializer):
items = OrderItemSerailzier(many=True)
discount = serializers.SerializerMethodField()
cart_total = serializers.SerializerMethodField()
tax = serializers.SerializerMethodField()
final_price = serializers.SerializerMethodField()
discount_code = serializers.SerializerMethodField()
class Meta:
model = OrderModel
fields = [ 'discount_code', 'items', 'cart_total', 'discount', 'tax', 'final_price']
def get_discount_code(self, obj):
return obj.discount_code.code if obj.discount_code else None
def get_discount(self, obj):
return [
{
'product_name': 'iphone 13',
'dicount': '20%',
'discount_amount': '100,000 تومان'
},
{
'product_name': 'iphone 12',
'dicount': '10%',
'discount_amount': '50,000 تومان'
},
]
def get_tax(self, obj):
return 1000
def get_cart_total(self, obj):
return 10000
def get_final_price(self, obj):
return 8000
class OrderSerializer(serializers.ModelSerializer):
count = serializers.SerializerMethodField()
images = serializers.SerializerMethodField()
class Meta:
model = OrderModel
fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', "images", "count", "id"]
def get_count(self, obj):
return obj.items.all().count()
def get_images(self, obj):
image_list = [
self.context.get('request').build_absolute_uri(image.image.url)
if (image := item.product.images.all().first()) else None
for item in obj.items.all()[:3]
]
return filter(lambda x: x is not None, image_list)