serializers.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # coding=utf-8
  2. from django.conf import settings
  3. from rest_framework import serializers
  4. from utils.exceptions import CustomError
  5. from apps.base import Formater
  6. from apps.images.models import Images
  7. from .models import Product, ProductImg
  8. class ProductSerializer(serializers.ModelSerializer):
  9. category_t = serializers.CharField(source='category.name', read_only=True)
  10. price_f = serializers.SerializerMethodField()
  11. enabled_t = serializers.SerializerMethodField()
  12. create_user_t = serializers.CharField(source='create_user.name', read_only=True)
  13. cover_url = serializers.SerializerMethodField()
  14. def get_cover_url(self, obj):
  15. if obj.cover:
  16. return '{}{}'.format(settings.MEDIA_URL, obj.cover.picture)
  17. return ''
  18. def get_enabled_t(self, obj):
  19. if obj.enabled:
  20. return u"是"
  21. return u"否"
  22. def get_price_f(self, obj):
  23. return Formater.formatPriceShow(obj.price)
  24. class Meta:
  25. model = Product
  26. fields = '__all__'
  27. def validate(self, attrs):
  28. if 'price' in attrs:
  29. attrs['price'] = Formater.formatPrice(attrs['price'])
  30. return attrs
  31. def create(self, validated_data):
  32. validated_data['create_user'] = self.context['request'].user
  33. cover = self.initial_data.get('image', None)
  34. if not cover:
  35. raise CustomError(u'商品封面图是必填项!')
  36. validated_data['cover'] = Images.objects.employee_addnew(validated_data['create_user'], Images.PRODUCT_COVER, cover)
  37. instance = super(ProductSerializer, self).create(validated_data)
  38. return instance
  39. def update(self, instance, validated_data):
  40. old_cover = None
  41. cover = self.initial_data.get('image', None)
  42. if cover:
  43. old_cover = instance.cover
  44. validated_data['cover'] = Images.objects.employee_addnew(self.context['request'].user, Images.PRODUCT_COVER, cover)
  45. instance = super(ProductSerializer, self).update(instance, validated_data)
  46. if old_cover:
  47. old_cover.del_images()
  48. return instance
  49. class ProductImgSerializer(serializers.ModelSerializer):
  50. img_url = serializers.SerializerMethodField()
  51. def get_img_url(self, obj):
  52. return '{}{}'.format(settings.MEDIA_URL, obj.img.picture)
  53. class Meta:
  54. model = ProductImg
  55. fields = '__all__'