serializers.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. class Meta:
  20. model = Commodity
  21. fields = '__all__'
  22. def get_price(self, obj):
  23. return Formater.formatPriceShow(obj.price)
  24. def get_vip_price(self, obj):
  25. return Formater.formatPriceShow(obj.vip_price)
  26. def get_point_price(self, obj):
  27. return Formater.formatPriceShow(obj.point_price)
  28. def validate(self, attrs):
  29. if 'category' in attrs and attrs['category']:
  30. if not attrs['category'].enable:
  31. raise CustomError(u'该商品类别已被禁用,请刷新后重试!')
  32. if not attrs['category'].delete:
  33. raise CustomError(u'该商品类别已被删除,请刷新后重试!')
  34. if 'price' in self.initial_data:
  35. attrs['price'] = Formater.formatPrice(self.initial_data['price'])
  36. if 'vip_price' in self.initial_data:
  37. attrs['vip_price'] = Formater.formatPrice(self.initial_data['vip_price'])
  38. if 'point_price' in self.initial_data:
  39. attrs['point_price'] = Formater.formatPrice(self.initial_data['point_price'])
  40. if attrs['type'] == Commodity.CASH:
  41. attrs['point_price'] = 0
  42. elif attrs['type'] == Commodity.POINT:
  43. attrs['price'] = 0
  44. attrs['vip_price'] = 0
  45. return attrs
  46. def create(self, validated_data):
  47. validated_data['create_user'] = self.context['request'].user
  48. instance = super(CommoditySerializer, self).create(validated_data)
  49. return instance
  50. def update(self, instance, validated_data):
  51. if instance.delete:
  52. raise CustomError(u'该商品已删除,禁止操作!')
  53. instance = super(CommoditySerializer, self).update(instance, validated_data)
  54. return instance
  55. class CommodityImageSerializer(serializers.ModelSerializer):
  56. img_url = serializers.SerializerMethodField()
  57. image_name = serializers.CharField(source='img.name', read_only=True)
  58. def get_img_url(self, obj):
  59. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  60. class Meta:
  61. model = CommodityImage
  62. fields = ('img_url', 'image_name', 'id',)