serializers.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. show_image_url = serializers.CharField(source='show_image.picture', read_only=True)
  19. detail_image = serializers.SerializerMethodField()
  20. carousel_image = serializers.SerializerMethodField()
  21. class Meta:
  22. model = Commodity
  23. fields = '__all__'
  24. def get_price(self, obj):
  25. return Formater.formatValueShow(obj.price)
  26. def get_vip_price(self, obj):
  27. return Formater.formatValueShow(obj.vip_price)
  28. def get_detail_image(self, obj):
  29. count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).count()
  30. return count
  31. def get_carousel_image(self, obj):
  32. count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).count()
  33. return count
  34. def validate(self, attrs):
  35. if 'category' in attrs and attrs['category']:
  36. if not attrs['category'].enable:
  37. raise CustomError(u'该商品类别已被禁用,请刷新后重试!')
  38. if attrs['category'].delete:
  39. raise CustomError(u'该商品类别已被删除,请刷新后重试!')
  40. if 'price' in self.initial_data:
  41. attrs['price'] = Formater.formatValue(self.initial_data['price'])
  42. if 'vip_price' in self.initial_data:
  43. attrs['vip_price'] = Formater.formatValue(self.initial_data['vip_price'])
  44. if 'point_price' in self.initial_data:
  45. attrs['point_price'] = self.initial_data['point_price']
  46. if attrs['type'] == Commodity.CASH:
  47. attrs['point_price'] = 0
  48. elif attrs['type'] == Commodity.POINT:
  49. attrs['price'] = 0
  50. attrs['vip_price'] = 0
  51. return attrs
  52. def create(self, validated_data):
  53. validated_data['create_user'] = self.context['request'].user
  54. instance = super(CommoditySerializer, self).create(validated_data)
  55. return instance
  56. def update(self, instance, validated_data):
  57. if instance.delete:
  58. raise CustomError(u'该商品已删除,禁止操作!')
  59. instance = super(CommoditySerializer, self).update(instance, validated_data)
  60. return instance