12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- # coding=utf-8
- from django.conf import settings
- from rest_framework import serializers
- from utils.exceptions import CustomError
- from apps.base import Formater
- from apps.images.models import Images
- from .models import Product, ProductImg
- class ProductSerializer(serializers.ModelSerializer):
- category_t = serializers.CharField(source='category.name', read_only=True)
- price_f = serializers.SerializerMethodField()
- enabled_t = serializers.SerializerMethodField()
- create_user_t = serializers.CharField(source='create_user.name', read_only=True)
- cover_url = serializers.SerializerMethodField()
- def get_cover_url(self, obj):
- if obj.cover:
- return '{}{}'.format(settings.MEDIA_URL, obj.cover.picture)
- return ''
- def get_enabled_t(self, obj):
- if obj.enabled:
- return u"是"
- return u"否"
- def get_price_f(self, obj):
- return Formater.formatPriceShow(obj.price)
- class Meta:
- model = Product
- fields = '__all__'
- def validate(self, attrs):
- if 'price' in attrs:
- attrs['price'] = Formater.formatPrice(attrs['price'])
- return attrs
- def create(self, validated_data):
- validated_data['create_user'] = self.context['request'].user
- cover = self.initial_data.get('image', None)
- if not cover:
- raise CustomError(u'商品封面图是必填项!')
- validated_data['cover'] = Images.objects.employee_addnew(validated_data['create_user'], Images.PRODUCT_COVER, cover)
- instance = super(ProductSerializer, self).create(validated_data)
- return instance
- def update(self, instance, validated_data):
- old_cover = None
- cover = self.initial_data.get('image', None)
- if cover:
- old_cover = instance.cover
- validated_data['cover'] = Images.objects.employee_addnew(self.context['request'].user, Images.PRODUCT_COVER, cover)
- instance = super(ProductSerializer, self).update(instance, validated_data)
- if old_cover:
- old_cover.del_images()
- return instance
- class ProductImgSerializer(serializers.ModelSerializer):
- img_url = serializers.SerializerMethodField()
- def get_img_url(self, obj):
- return '{}{}'.format(settings.MEDIA_URL, obj.img.picture)
- class Meta:
- model = ProductImg
- fields = '__all__'
|