serializers.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. price = PriceShowCharField()
  19. sale_price = PriceShowCharField()
  20. class Meta:
  21. model = Model
  22. fields = '__all__'
  23. class ModelDetailSerializer(serializers.ModelSerializer):
  24. series_name = serializers.CharField(source='series.name', read_only=True)
  25. brand_name = serializers.CharField(source='series.brand.name', read_only=True)
  26. img_url = serializers.SerializerMethodField()
  27. images = serializers.SerializerMethodField()
  28. stores = serializers.SerializerMethodField()
  29. price = PriceShowCharField()
  30. sale_price = PriceShowCharField()
  31. def get_img_url(self, obj):
  32. if obj.thumbnail:
  33. return {'width': obj.thumbnail.width, 'height': obj.thumbnail.height, 'url': obj.thumbnail.get_path()}
  34. return ''
  35. def get_images(self, obj):
  36. result = []
  37. rows = VehicleImg.objects.filter(vehicle_model=obj).values('img__picture', 'img__width', 'img__height')
  38. for row in rows:
  39. url = {'width': row['img__width'], 'height': row['img__height'],
  40. 'url': '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row['img__picture'])}
  41. result.append(url)
  42. return result
  43. def get_stores(self, obj):
  44. result = []
  45. store_rows = StoreBrand.objects.filter(brand_id=obj.series.brand_id).values('store_id')
  46. shop_ids = [store_row['store_id'] for store_row in store_rows]
  47. rows = Shop.objects.filter(id__in=shop_ids, delete=False, enabled=True)
  48. for row in rows:
  49. item = {'name': row.name, 'addr': row.addr, 'tel': row.tel, 'img': ''}
  50. if row.img:
  51. item['img'] = '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row.img.picture)
  52. result.append(item)
  53. return result
  54. class Meta:
  55. model = Model
  56. fields = '__all__'