serializers.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # coding=utf-8
  2. from django.conf import settings
  3. from rest_framework import serializers
  4. from apps.vehicle.models import Series, Model, VehicleImg
  5. from utils.booleancharfield import PriceShowCharField
  6. from apps.store.models import Shop, StoreBrand
  7. class SeriesSerializer(serializers.ModelSerializer):
  8. brand_name = serializers.CharField(source='brand.name', read_only=True)
  9. img = serializers.SerializerMethodField()
  10. def get_img(self, obj):
  11. if obj.thumbnail:
  12. return {'width': obj.thumbnail.width, 'height': obj.thumbnail.height, 'url': obj.thumbnail.get_path()}
  13. return ''
  14. class Meta:
  15. model = Series
  16. fields = '__all__'
  17. class ModelSerializer(serializers.ModelSerializer):
  18. series_name = serializers.CharField(source='series.name', read_only=True)
  19. brand_name = serializers.CharField(source='series.brand.name', read_only=True)
  20. img_url = serializers.SerializerMethodField()
  21. images = serializers.SerializerMethodField()
  22. price = PriceShowCharField()
  23. sale_price = PriceShowCharField()
  24. def get_img_url(self, obj):
  25. if obj.thumbnail:
  26. return {'width': obj.thumbnail.width, 'height': obj.thumbnail.height, 'url': obj.thumbnail.get_path()}
  27. return ''
  28. def get_images(self, obj):
  29. result = []
  30. rows = VehicleImg.objects.filter(vehicle_model=obj).values('img__picture', 'img__width', 'img__height')
  31. for row in rows:
  32. url = {'width': row['img__width'], 'height': row['img__height'],
  33. 'url': '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row['img__picture'])}
  34. result.append(url)
  35. return result
  36. class Meta:
  37. model = Model
  38. fields = '__all__'
  39. class ModelDetailSerializer(serializers.ModelSerializer):
  40. series_name = serializers.CharField(source='series.name', read_only=True)
  41. brand_name = serializers.CharField(source='series.brand.name', read_only=True)
  42. img_url = serializers.SerializerMethodField()
  43. images = serializers.SerializerMethodField()
  44. stores = serializers.SerializerMethodField()
  45. price = PriceShowCharField()
  46. sale_price = PriceShowCharField()
  47. def get_img_url(self, obj):
  48. if obj.thumbnail:
  49. return {'width': obj.thumbnail.width, 'height': obj.thumbnail.height, 'url': obj.thumbnail.get_path()}
  50. return ''
  51. def get_images(self, obj):
  52. result = []
  53. rows = VehicleImg.objects.filter(vehicle_model=obj).values('img__picture', 'img__width', 'img__height')
  54. for row in rows:
  55. url = {'width': row['img__width'], 'height': row['img__height'],
  56. 'url': '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row['img__picture'])}
  57. result.append(url)
  58. return result
  59. def get_stores(self, obj):
  60. result = []
  61. store_rows = StoreBrand.objects.filter(brand_id=obj.series.brand_id).values('shop_id')
  62. shop_ids = [store_row['shop_id'] for store_row in store_rows]
  63. rows = Shop.objects.filter(id__in=shop_ids, delete=False, enabled=False)
  64. for row in rows:
  65. item = {'name': row.name, 'addr': row.addr, 'tel': row.tel, 'img': ''}
  66. if row.img:
  67. item['img'] = '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row.img.picture)
  68. result.append(item)
  69. return result
  70. class Meta:
  71. model = Model
  72. fields = '__all__'