serializers.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # coding=utf-8
  2. import json
  3. from django.conf import settings
  4. from rest_framework import serializers
  5. from apps.vehicle.models import Brand, Series, Model, VehicleImg, VehicleModelImg
  6. from apps.images.models import Images
  7. from utils.exceptions import CustomError
  8. from apps.base import Formater
  9. class BrandSerializer(serializers.ModelSerializer):
  10. enabled_text = serializers.SerializerMethodField()
  11. def get_enabled_text(self, obj):
  12. if obj.enabled:
  13. return u'是'
  14. return u'否'
  15. class Meta:
  16. model = Brand
  17. fields = '__all__'
  18. def create(self, validated_data):
  19. instance = super(BrandSerializer, self).create(validated_data)
  20. return instance
  21. def update(self, instance, validated_data):
  22. instance = super(BrandSerializer, self).update(instance, validated_data)
  23. return instance
  24. class SeriesSerializer(serializers.ModelSerializer):
  25. brand_name = serializers.CharField(source='brand.name', read_only=True)
  26. enabled_text = serializers.SerializerMethodField()
  27. img_url = serializers.SerializerMethodField()
  28. is_hot_text = serializers.SerializerMethodField()
  29. def get_is_hot_text(self, obj):
  30. if obj.is_hot:
  31. return u'是'
  32. return u'否'
  33. def get_enabled_text(self, obj):
  34. if obj.enabled:
  35. return u'是'
  36. return u'否'
  37. def get_img_url(self, obj):
  38. if obj.thumbnail:
  39. return '%s%s' % (settings.MEDIA_URL, obj.thumbnail.picture)
  40. return ''
  41. class Meta:
  42. model = Series
  43. fields = '__all__'
  44. def create(self, validated_data):
  45. user = self.context['request'].user
  46. file = self.context['request'].FILES.get('image', None)
  47. if file:
  48. validated_data['thumbnail'] = Images.objects.employee_addnew(user, Images.VEHICLE_SERIES_THUMBNAIL,
  49. file)
  50. instance = super(SeriesSerializer, self).create(validated_data)
  51. return instance
  52. class ModelSerializer(serializers.ModelSerializer):
  53. series_name = serializers.CharField(source='series.name', read_only=True)
  54. brand_name = serializers.CharField(source='series.brand.name', read_only=True)
  55. enabled_text = serializers.SerializerMethodField()
  56. hot_text = serializers.SerializerMethodField()
  57. thumbnail_url = serializers.SerializerMethodField()
  58. price_show = serializers.SerializerMethodField()
  59. shop_price_show = serializers.SerializerMethodField()
  60. advance_pay_show = serializers.SerializerMethodField()
  61. equal_pay_show = serializers.SerializerMethodField()
  62. price = serializers.CharField()
  63. advance_pay = serializers.CharField()
  64. equal_pay = serializers.CharField()
  65. commission_ratio = serializers.CharField(required=False)
  66. playbill_url = serializers.SerializerMethodField()
  67. full_name = serializers.SerializerMethodField()
  68. commission_amount = serializers.SerializerMethodField()
  69. def get_commission_amount(self, obj):
  70. if obj.commission_ratio != None:
  71. return Formater.formatAmountShow(obj.commission_ratio)
  72. return ''
  73. def get_shop_price_show(self, obj):
  74. return Formater.formatAmountShow(obj.shop_price)
  75. def get_price_show(self, obj):
  76. return Formater.formatAmountShow(obj.price)
  77. def get_advance_pay_show(self, obj):
  78. return Formater.formatAmountShow(obj.advance_pay)
  79. def get_equal_pay_show(self, obj):
  80. return Formater.formatAmountShow(obj.equal_pay)
  81. def get_enabled_text(self, obj):
  82. if obj.enabled:
  83. return u'是'
  84. return u'否'
  85. def get_hot_text(self, obj):
  86. if obj.is_hot:
  87. return u'是'
  88. return u'否'
  89. def get_full_name(self, obj):
  90. return obj.series.brand.name + '-' + obj.series.name + '-' + obj.name
  91. def get_thumbnail_url(self, obj):
  92. if obj.thumbnail:
  93. return '%s%s' % (settings.MEDIA_URL, obj.thumbnail.picture)
  94. return ''
  95. def get_playbill_url(self, obj):
  96. if obj.playbill:
  97. return '%s%s' % (settings.MEDIA_URL, obj.playbill.picture)
  98. return ''
  99. class Meta:
  100. model = Model
  101. fields = '__all__'
  102. def create(self, validated_data):
  103. user = self.context['request'].user
  104. thumbnail = self.context['request'].FILES.get('image', None)
  105. tags = self.context['request'].data.get('tags')
  106. if thumbnail:
  107. validated_data['thumbnail'] = Images.objects.employee_addnew(user.employee, Images.VEHICLE_MODEL_THUMBNAIL,
  108. thumbnail)
  109. instance = super(ModelSerializer, self).create(validated_data)
  110. return instance
  111. def validate(self, attrs):
  112. if 'price' in attrs:
  113. attrs['price'] = Formater.formatAmount(attrs['price'])
  114. if 'equal_pay' in attrs:
  115. attrs['equal_pay'] = Formater.formatAmount(attrs['equal_pay'])
  116. if 'advance_pay' in attrs:
  117. attrs['advance_pay'] = Formater.formatAmount(attrs['advance_pay'])
  118. if 'shop_price' in attrs:
  119. attrs['shop_price'] = Formater.formatAmount(attrs['shop_price'])
  120. if 'commission_ratio' in attrs and attrs['commission_ratio']:
  121. attrs['commission_ratio'] = Formater.formatAmount(attrs['commission_ratio'])
  122. else:
  123. attrs['commission_ratio'] = None
  124. return attrs
  125. class VehicleImgSerializer(serializers.ModelSerializer):
  126. img_url = serializers.SerializerMethodField()
  127. def get_img_url(self, obj):
  128. if obj.img:
  129. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  130. return ''
  131. class Meta:
  132. model = VehicleImg
  133. fields = '__all__'
  134. class VehicleModelImgSerializer(serializers.ModelSerializer):
  135. img_url = serializers.SerializerMethodField()
  136. def get_img_url(self, obj):
  137. if obj.img:
  138. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  139. return ''
  140. class Meta:
  141. model = VehicleModelImg
  142. fields = '__all__'