update cart logic

This commit is contained in:
Parsa Nazer
2025-09-23 10:17:19 +03:30
parent cd6c5bf343
commit dab89b93a7
13 changed files with 469 additions and 153 deletions
+22 -20
View File
@@ -1,5 +1,5 @@
from rest_framework import serializers
from .models import OrderItemModel, OrderModel, DiscountCode
from .models import OrderItemModel, OrderModel, DiscountCode, Cart, CartItem
from product.serializers import ProductVariantSerialzier, AttributeValueSerialzier, ProductImageSerailizer
from account.serializers import UserAddressSerializer
from product.models import ProductVariant
@@ -52,38 +52,37 @@ class OrderItemSerailzier(serializers.ModelSerializer):
final_price = serializers.SerializerMethodField()
discount = serializers.SerializerMethodField()
class Meta:
model = OrderItemModel
exclude = ('order',)
read_only_fields = ('order', 'product', 'discount_percent')
model = CartItem
exclude = ('cart',)
read_only_fields = ('cart', 'product', 'discount_percent')
def get_product(self, obj):
return ProductVariantSerialzier(instance=obj.product, context={'request': self.context.get('request')}).data
return ProductVariantSerialzier(instance=obj.product_variant, context={'request': self.context.get('request')}).data
def get_discount_amount(self, obj):
discount_amount = int(obj.price * (obj.product.discount / 100))
return f'{(discount_amount * obj.quantity):,.0f} تومان'
return f'{obj.item_discount_amount:,.0f} تومان'
def get_final_price(self, obj):
final_price = obj.price - int(obj.price * (obj.product.discount / 100))
return f'{(final_price * obj.quantity):,.0f} تومان'
return f'{obj.price_after_discount:,.0f} تومان'
def get_price(self, obj):
return f'{(obj.price * obj.quantity):,.0f} تومان'
return f'{obj.price_before_discount:,.0f} تومان'
def get_discount(self, obj):
return obj.product.discount
return obj.product_variant.discount
from django.conf import settings
class CartSerializer(serializers.ModelSerializer):
items = OrderItemSerailzier(many=True)
cart_total = serializers.SerializerMethodField()
tax = serializers.SerializerMethodField()
tax_amount = serializers.SerializerMethodField()
final_price = serializers.SerializerMethodField()
discount_code = serializers.SerializerMethodField()
items_discount_amount = serializers.SerializerMethodField()
address = UserAddressSerializer()
class Meta:
model = OrderModel
fields = [ 'discount_code', 'items', 'cart_total', 'tax', 'final_price', 'address']
model = Cart
fields = ['items_discount_amount', 'discount_code', 'items', 'cart_total', 'tax_amount', 'final_price', 'address']
def get_discount_code(self, obj):
@@ -91,20 +90,23 @@ class CartSerializer(serializers.ModelSerializer):
return {
'code': f'{obj.discount_code.code}',
'percent': obj.discount_code.percent,
'amount': f'{10000:,.0f} تومان'
'amount': f'{obj.discount_code_amount:,.0f} تومان'
}
else:
return None
def get_tax(self, obj):
return f'{1000:,.0f} تومان'
def get_tax_amount(self, obj):
return f'{obj.tax_amount:,.0f} تومان'
def get_cart_total(self, obj):
return f'{10000:,.0f} تومان'
return f'{obj.cart_total:,.0f} تومان'
def get_items_discount_amount(self, obj):
return f'{obj.items_discount_amount:,.0f} تومان'
def get_final_price(self, obj):
return f'{8000:,.0f} تومان'
return f'{obj.final_price:,.0f} تومان'
class OrderListSerializer(serializers.ModelSerializer):