github.com/ismailbayram/bigpicture@v0.0.0-20231225173155-e4b21f5efcff/internal/browser/pyproject/baskets/resources/serializers.py (about) 1 from rest_framework import serializers 2 3 from api.fields import EnumField 4 from baskets.models import Basket, BasketItem, DiscountItem, Campaign 5 from baskets.enums import PromotionType 6 from cars.resources.serializers import CarSerializer 7 from products.resources.serializers import ProductSerializer 8 from products.models import Product 9 from products.enums import Currency 10 11 12 class CreateBasketItemSerializer(serializers.Serializer): 13 product = serializers.PrimaryKeyRelatedField(queryset=Product.objects.filter(is_active=True, 14 store__is_approved=True, 15 store__is_active=True)) 16 17 18 class DiscountItemSerializer(serializers.ModelSerializer): 19 name = serializers.CharField(source='campaign.name') 20 21 class Meta: 22 model = DiscountItem 23 fields = ('name', 'amount') 24 25 26 class BasketItemSerializer(serializers.ModelSerializer): 27 price = serializers.DecimalField(source='get_price', max_digits=6, 28 decimal_places=2, read_only=True) 29 product = ProductSerializer() 30 31 class Meta: 32 model = BasketItem 33 fields = ('product', 'price', 'quantity',) 34 35 36 class BasketSerializer(serializers.ModelSerializer): 37 currency = EnumField(enum=Currency) 38 total_amount = serializers.DecimalField(source='get_total_amount', max_digits=6, 39 decimal_places=2, read_only=True) 40 total_quantity = serializers.IntegerField(source='get_total_quantity') 41 net_amount = serializers.DecimalField(source='get_net_amount', max_digits=6, 42 decimal_places=2, read_only=True) 43 car = CarSerializer() 44 basketitem_set = BasketItemSerializer(many=True) 45 warning_messages = serializers.ListField() 46 campaign_messages = serializers.ListField() 47 discountitem_set = DiscountItemSerializer(many=True) 48 49 class Meta: 50 model = Basket 51 fields = ('currency', 'total_amount', 'total_quantity', 'net_amount', 'car', 52 'basketitem_set', 'discountitem_set', 'warning_messages', 'campaign_messages',) 53 54 55 class CampaignSerializer(serializers.ModelSerializer): 56 promotion_type = EnumField(enum=PromotionType) 57 58 class Meta: 59 model = Campaign 60 fields = ('pk', 'name', 'promotion_type')