structre product cart response
This commit is contained in:
@@ -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'
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user