serializers.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # coding=utf-8
  2. import json
  3. from django.conf import settings
  4. from rest_framework import serializers
  5. from django.db.models import Q
  6. from apps.commodity.models import Commodity, CommodityImage
  7. from apps.images.models import Images
  8. from apps.base import Formater
  9. from utils.exceptions import CustomError
  10. class CommoditySerializer(serializers.ModelSerializer):
  11. category_text = serializers.CharField(source='category.name', read_only=True)
  12. type_text = serializers.CharField(source='get_type_display', read_only=True)
  13. status_text = serializers.CharField(source='get_status_display', read_only=True)
  14. create_user_text = serializers.CharField(source='create_user.employee.name', read_only=True)
  15. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  16. price = serializers.SerializerMethodField()
  17. vip_price = serializers.SerializerMethodField()
  18. point_price = serializers.SerializerMethodField()
  19. show_image_url = serializers.CharField(source='show_image.picture', read_only=True)
  20. detail_image = serializers.SerializerMethodField()
  21. carousel_image = serializers.SerializerMethodField()
  22. class Meta:
  23. model = Commodity
  24. fields = '__all__'
  25. def get_price(self, obj):
  26. return Formater.formatPriceShow(obj.price)
  27. def get_vip_price(self, obj):
  28. return Formater.formatPriceShow(obj.vip_price)
  29. def get_point_price(self, obj):
  30. return Formater.formatPriceShow(obj.point_price)
  31. def get_detail_image(self, obj):
  32. count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).count()
  33. return count
  34. def get_carousel_image(self, obj):
  35. count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).count()
  36. return count
  37. def validate(self, attrs):
  38. if 'category' in attrs and attrs['category']:
  39. if not attrs['category'].enable:
  40. raise CustomError(u'该商品类别已被禁用,请刷新后重试!')
  41. if attrs['category'].delete:
  42. raise CustomError(u'该商品类别已被删除,请刷新后重试!')
  43. if 'price' in self.initial_data:
  44. attrs['price'] = Formater.formatPrice(self.initial_data['price'])
  45. if 'vip_price' in self.initial_data:
  46. attrs['vip_price'] = Formater.formatPrice(self.initial_data['vip_price'])
  47. if 'point_price' in self.initial_data:
  48. attrs['point_price'] = Formater.formatPrice(self.initial_data['point_price'])
  49. if attrs['type'] == Commodity.CASH:
  50. attrs['point_price'] = 0
  51. elif attrs['type'] == Commodity.POINT:
  52. attrs['price'] = 0
  53. attrs['vip_price'] = 0
  54. return attrs
  55. def create(self, validated_data):
  56. validated_data['create_user'] = self.context['request'].user
  57. instance = super(CommoditySerializer, self).create(validated_data)
  58. return instance
  59. def update(self, instance, validated_data):
  60. if instance.delete:
  61. raise CustomError(u'该商品已删除,禁止操作!')
  62. instance = super(CommoditySerializer, self).update(instance, validated_data)
  63. return instance
  64. class CommodityImageSerializer(serializers.ModelSerializer):
  65. img_url = serializers.SerializerMethodField()
  66. def get_img_url(self, obj):
  67. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  68. class Meta:
  69. model = CommodityImage
  70. fields = ('img_url', 'id',)