serializers.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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.booleancharfield import PriceShowCharField
  8. from utils.exceptions import CustomError
  9. from apps.base import Formater
  10. class BrandSerializer(serializers.ModelSerializer):
  11. enabled_text = serializers.SerializerMethodField()
  12. def get_enabled_text(self, obj):
  13. if obj.enabled:
  14. return u'是'
  15. return u'否'
  16. class Meta:
  17. model = Brand
  18. fields = '__all__'
  19. def create(self, validated_data):
  20. instance = super(BrandSerializer, self).create(validated_data)
  21. return instance
  22. def update(self, instance, validated_data):
  23. instance = super(BrandSerializer, self).update(instance, validated_data)
  24. return instance
  25. class SeriesSerializer(serializers.ModelSerializer):
  26. brand_name = serializers.CharField(source='brand.name', read_only=True)
  27. enabled_text = serializers.SerializerMethodField()
  28. img_url = serializers.SerializerMethodField()
  29. is_hot_text = serializers.SerializerMethodField()
  30. def get_is_hot_text(self, obj):
  31. if obj.is_hot:
  32. return u'是'
  33. return u'否'
  34. def get_enabled_text(self, obj):
  35. if obj.enabled:
  36. return u'是'
  37. return u'否'
  38. def get_img_url(self, obj):
  39. if obj.thumbnail:
  40. return '%s%s' % (settings.MEDIA_URL, obj.thumbnail.picture)
  41. return ''
  42. class Meta:
  43. model = Series
  44. fields = '__all__'
  45. def create(self, validated_data):
  46. user = self.context['request'].user
  47. file = self.context['request'].FILES.get('image', None)
  48. if file:
  49. validated_data['thumbnail'] = Images.objects.employee_addnew(user, Images.VEHICLE_SERIES_THUMBNAIL,
  50. file)
  51. instance = super(SeriesSerializer, self).create(validated_data)
  52. return instance
  53. class ModelSerializer(serializers.ModelSerializer):
  54. series_name = serializers.CharField(source='series.name', read_only=True)
  55. brand_name = serializers.CharField(source='series.brand.name', read_only=True)
  56. enabled_text = serializers.SerializerMethodField()
  57. thumbnail_url = serializers.SerializerMethodField()
  58. price = PriceShowCharField()
  59. sale_price = PriceShowCharField()
  60. def get_enabled_text(self, obj):
  61. if obj.enabled:
  62. return u'是'
  63. return u'否'
  64. def get_thumbnail_url(self, obj):
  65. if obj.thumbnail:
  66. return '%s%s' % (settings.MEDIA_URL, obj.thumbnail.picture)
  67. return ''
  68. class Meta:
  69. model = Model
  70. fields = '__all__'
  71. def create(self, validated_data):
  72. user = self.context['request'].user
  73. thumbnail = self.context['request'].FILES.get('image', None)
  74. if thumbnail:
  75. validated_data['thumbnail'] = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_THUMBNAIL,
  76. thumbnail)
  77. instance = super(ModelSerializer, self).create(validated_data)
  78. return instance
  79. def validate(self, attrs):
  80. if 'price' in attrs:
  81. attrs['price'] = Formater.formatPrice(attrs['price'])
  82. if 'sale_price' in attrs:
  83. attrs['sale_price'] = Formater.formatPrice(attrs['sale_price'])
  84. return attrs
  85. class VehicleImgSerializer(serializers.ModelSerializer):
  86. img_url = serializers.SerializerMethodField()
  87. def get_img_url(self, obj):
  88. if obj.img:
  89. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  90. return ''
  91. class Meta:
  92. model = VehicleImg
  93. fields = '__all__'
  94. class VehicleModelImgSerializer(serializers.ModelSerializer):
  95. img_url = serializers.SerializerMethodField()
  96. def get_img_url(self, obj):
  97. if obj.img:
  98. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  99. return ''
  100. class Meta:
  101. model = VehicleModelImg
  102. fields = '__all__'