serializers.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # coding=utf-8
  2. from django.conf import settings
  3. from rest_framework import serializers
  4. from apps.commodity.models import Commodity, CommodityImage
  5. from apps.collection.models import Collection
  6. from apps.base import Formater
  7. from apps.customer.models import Customer
  8. from apps.option.models import Option
  9. class CommoditySerializer(serializers.ModelSerializer):
  10. show_image_url = serializers.SerializerMethodField()
  11. price = serializers.SerializerMethodField()
  12. vip_price = serializers.SerializerMethodField()
  13. sale_count = serializers.SerializerMethodField()
  14. def get_sale_count(self, obj):
  15. count = (obj.total_sales or 0) + (obj.initial_sale_count or 0)
  16. return count
  17. def get_price(self, obj):
  18. return Formater.formatValueShow(obj.price)
  19. def get_vip_price(self, obj):
  20. return Formater.formatValueShow(obj.vip_price)
  21. def get_show_image_url(self, obj):
  22. if obj.show_image:
  23. return obj.show_image.get_path()
  24. return ''
  25. class Meta:
  26. model = Commodity
  27. fields = ('id', 'show_image_url', 'price', 'vip_price', 'sale_count', 'point_price', 'type', 'name', )
  28. class CommodityDetailSerializer(serializers.ModelSerializer):
  29. sale_count = serializers.SerializerMethodField()
  30. is_collection = serializers.SerializerMethodField()
  31. carousel_urls = serializers.SerializerMethodField()
  32. details_urls = serializers.SerializerMethodField()
  33. price = serializers.SerializerMethodField()
  34. vip_price = serializers.SerializerMethodField()
  35. show_image = serializers.SerializerMethodField()
  36. def get_sale_count(self, obj):
  37. count = (obj.total_sales or 0) + (obj.initial_sale_count or 0)
  38. return count
  39. def get_is_collection(self, obj):
  40. if not self.context['request'].user or not self.context['request'].user.is_authenticated or not self.context['request'].user.is_customer():
  41. return False
  42. customer = Customer.objects.filter(user=self.context['request'].user).first()
  43. if not customer:
  44. return False
  45. return Collection.is_collection(customer, obj)
  46. def get_carousel_urls(self, obj):
  47. result = []
  48. rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).values('image__picture')
  49. for row in rows:
  50. url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
  51. result.append(url)
  52. return result
  53. def get_details_urls(self, obj):
  54. result = []
  55. rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).values('image__picture')
  56. for row in rows:
  57. url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
  58. result.append(url)
  59. return result
  60. def get_show_image(self, obj):
  61. if obj.show_image:
  62. return obj.show_image.get_path()
  63. return ''
  64. def get_price(self, obj):
  65. return Formater.formatValueShow(obj.price)
  66. def get_vip_price(self, obj):
  67. return Formater.formatValueShow(obj.vip_price)
  68. class Meta:
  69. model = Commodity
  70. fields = (
  71. 'id', 'name', 'price', 'vip_price', 'point_price', 'sale_count', 'is_collection', 'carousel_urls', 'details_urls', 'show_image', 'type',
  72. )
  73. class CommodityCategorySerializer(serializers.ModelSerializer):
  74. label = serializers.CharField(source='name', read_only=True)
  75. class Meta:
  76. model = Option
  77. fields = ('id', 'label', )
  78. class HomeOptionSerializer(serializers.ModelSerializer):
  79. commodity_list = serializers.SerializerMethodField()
  80. class Meta:
  81. model = Option
  82. fields = ('id', 'name', 'commodity_list', )
  83. def get_commodity_list(self, obj):
  84. rows = Commodity.objects.filter(category=obj, delete=False, status=settings.ONLINE)
  85. serializer = CommoditySerializer(rows, many=True)
  86. data = serializer.data
  87. return data