structre product cart response

This commit is contained in:
Parsa Nazer
2025-03-12 20:27:08 +03:30
parent e9d6426856
commit e6ff075e99
2 changed files with 36 additions and 37 deletions
+36 -24
View File
@@ -1,7 +1,30 @@
from rest_framework import serializers
from .models import OrderItemModel, OrderModel, DiscountCode
from product.serializers import ProductVariantSerialzier
from product.serializers import ProductVariantSerialzier, AttributeValueSerialzier, ProductImageSerailizer
from account.serializers import UserAddressSerializer
from product.models import ProductVariant
class ProductVariantSerialzier(serializers.ModelSerializer):
product_attributes = AttributeValueSerialzier(many=True)
image = serializers.SerializerMethodField()
discount_amount = serializers.SerializerMethodField()
title = serializers.SerializerMethodField()
price = serializers.CharField()
class Meta:
model = ProductVariant
fields = ['title', 'product_attributes', 'in_stock', 'price', 'discount', 'color', 'image', 'discount_amount']
def get_discount_amount(self, obj):
discount_amount = int(obj.price * (obj.discount / 100))
return f'{discount_amount}'
def get_image(self, obj):
return self.context.get('request').build_absolute_uri(obj.images.all().first().image.url)
def get_title(self, obj):
return obj.product.name
class DiscountCodeSerializer(serializers.ModelSerializer):
class Meta:
model = DiscountCode
@@ -13,58 +36,47 @@ class OrderItemSerailzier(serializers.ModelSerializer):
product = serializers.SerializerMethodField()
class Meta:
model = OrderItemModel
fields = "__all__"
read_only_fields = ('order', 'product', 'price')
exclude = ('price', 'order')
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)
product_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', 'product_discount', 'tax', 'final_price']
fields = [ 'discount_code', 'items', 'cart_total', 'tax', 'final_price']
def get_discount_code(self, obj):
if obj.discount_code:
return {
'code': obj.discount_code.code,
'persent': obj.discount_code.percent,
'amount': '100,000 تومان'
'code': f'{obj.discount_code.code}',
'percent': obj.discount_code.percent,
'amount': '100000'
}
else:
return None
def get_product_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
return '1000'
def get_cart_total(self, obj):
return 10000
return '10000'
def get_final_price(self, obj):
return 8000
return '8000'