123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- # coding=utf-8
- from django.conf import settings
- from rest_framework import serializers
- from apps.commodity.models import Commodity, CommodityImage
- from apps.collection.models import Collection
- from apps.base import Formater
- from apps.customer.models import Customer
- from apps.option.models import Option
- class CommoditySerializer(serializers.ModelSerializer):
- show_image_url = serializers.SerializerMethodField()
- price = serializers.SerializerMethodField()
- vip_price = serializers.SerializerMethodField()
- sale_count = serializers.SerializerMethodField()
- def get_sale_count(self, obj):
- count = (obj.total_sales or 0) + (obj.initial_sale_count or 0)
- return count
- def get_price(self, obj):
- return Formater.formatValueShow(obj.price)
- def get_vip_price(self, obj):
- return Formater.formatValueShow(obj.vip_price)
- def get_show_image_url(self, obj):
- if obj.show_image:
- return obj.show_image.get_path()
- return ''
- class Meta:
- model = Commodity
- fields = ('id', 'show_image_url', 'price', 'vip_price', 'sale_count', 'point_price', 'type', 'name', )
- class CommodityDetailSerializer(serializers.ModelSerializer):
- sale_count = serializers.SerializerMethodField()
- is_collection = serializers.SerializerMethodField()
- carousel_urls = serializers.SerializerMethodField()
- details_urls = serializers.SerializerMethodField()
- price = serializers.SerializerMethodField()
- vip_price = serializers.SerializerMethodField()
- show_image = serializers.SerializerMethodField()
- # 评论
- def get_sale_count(self, obj):
- count = (obj.total_sales or 0) + (obj.initial_sale_count or 0)
- return count
- def get_is_collection(self, obj):
- if not self.context['request'].user or not self.context['request'].user.is_authenticated or not self.context['request'].user.is_customer():
- return False
- customer = Customer.objects.filter(user=self.context['request'].user).first()
- if not customer:
- return False
- return Collection.is_collection(customer, obj)
- def get_carousel_urls(self, obj):
- result = []
- rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).values('image__picture')
- for row in rows:
- url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
- result.append(url)
- return result
- def get_details_urls(self, obj):
- result = []
- rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).values('image__picture')
- for row in rows:
- url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
- result.append(url)
- return result
- def get_show_image(self, obj):
- if obj.show_image:
- return obj.show_image.get_path()
- return ''
- def get_price(self, obj):
- return Formater.formatValueShow(obj.price)
- def get_vip_price(self, obj):
- return Formater.formatValueShow(obj.vip_price)
- class Meta:
- model = Commodity
- fields = (
- 'id', 'name', 'price', 'vip_price', 'point_price', 'sale_count', 'is_collection', 'carousel_urls', 'details_urls', 'show_image',
- )
- class CommodityCategorySerializer(serializers.ModelSerializer):
- label = serializers.CharField(source='name', read_only=True)
- class Meta:
- model = Option
- fields = ('id', 'label', )
|