123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # coding=utf-8
- import datetime
- from django.conf import settings
- from rest_framework import serializers
- from utils.exceptions import CustomError
- from apps.order.models import ShoppingCart, Order, OrderDetails
- from apps.base import Formater
- class ShoppingCartSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='commodity_details.name', read_only=True)
- image = serializers.SerializerMethodField()
- price = serializers.SerializerMethodField()
- point_price = serializers.CharField(source='commodity_details.point_price', read_only=True)
- price_type = serializers.CharField(source='commodity_details.type', read_only=True)
- class Meta:
- model = ShoppingCart
- fields = '__all__'
- def get_price(self, obj):
- return Formater.formatValueShow(obj.commodity_details.price)
- def get_image(self, obj):
- if obj.commodity_details and obj.commodity_details.show_image:
- return obj.commodity_details.show_image.get_path()
- return ''
- def validate(self, attrs):
- if 'quantity' in attrs:
- try:
- quantity = int(attrs['quantity'])
- except:
- raise CustomError(u'商品数量错误,请修改!')
- if quantity <= 0:
- raise CustomError(u'商品数量错误,请修改!')
- if 'commodity_details' in attrs:
- if attrs['commodity_details'].delete:
- raise CustomError(u'该商品已删除,禁止购买!')
- if attrs['commodity_details'].status == settings.OFFLINE:
- raise CustomError(u'该商品已下架,禁止购买!')
- return attrs
- def create(self, validated_data):
- validated_data['customer'] = self.context['request'].customer
- instance = ShoppingCart.objects.filter(commodity_details=validated_data['commodity_details'], customer=validated_data['customer']).first()
- if instance:
- instance.quantity += validated_data['quantity']
- instance.save()
- else:
- instance = super(ShoppingCartSerializer, self).create(validated_data)
- return instance
- class OderSerializer(serializers.ModelSerializer):
- class Meta:
- model = Order
- fields = '__all__'
- def create(self, validated_data):
- validated_data['customer'] = self.context['request'].customer
- instance = super(OderSerializer, self).create(validated_data)
- return instance
- class OderSimpleSerializer(serializers.ModelSerializer):
- total_amount = serializers.SerializerMethodField()
- total_point = serializers.SerializerMethodField()
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- details = serializers.SerializerMethodField()
- class Meta:
- model = Order
- fields = ('no', 'total_amount', 'total_point', 'status_text', 'details', 'id', 'name', 'tel', 'user_address', )
- def get_total_amount(self, obj):
- return Formater.formatValueShow(obj.total_amount)
- def get_total_point(self, obj):
- return '%.2f' % obj.total_point
- def get_details(self, obj):
- rows = OrderDetails.objects.filter(order=obj)
- serializer = OderDetailSimpleSerializer(rows, many=True)
- return serializer.data
- class OderDetailSimpleSerializer(serializers.ModelSerializer):
- name = serializers.CharField(source='commodity.name', read_only=True)
- show_image = serializers.SerializerMethodField()
- amount = serializers.SerializerMethodField()
- point_amount = serializers.SerializerMethodField()
- type = serializers.CharField(source='commodity.type', read_only=True)
- commodity_id = serializers.CharField(source='commodity.id', read_only=True)
- class Meta:
- model = OrderDetails
- fields = ('name', 'show_image', 'amount', 'point_amount', 'count', 'type', 'commodity_id', )
- def get_show_image(self, obj):
- if obj.commodity and obj.commodity.show_image:
- return obj.commodity.show_image.get_path()
- return ''
- def get_amount(self, obj):
- return Formater.formatValueShow(obj.amount)
- def get_point_amount(self, obj):
- return '%.2f' % obj.point_amount
|