serializers.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. # 评论
  37. def get_sale_count(self, obj):
  38. count = (obj.total_sales or 0) + (obj.initial_sale_count or 0)
  39. return count
  40. def get_is_collection(self, obj):
  41. if not self.context['request'].user or not self.context['request'].user.is_authenticated or not self.context['request'].user.is_customer():
  42. return False
  43. customer = Customer.objects.filter(user=self.context['request'].user).first()
  44. if not customer:
  45. return False
  46. return Collection.is_collection(customer, obj)
  47. def get_carousel_urls(self, obj):
  48. result = []
  49. rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).values('image__picture')
  50. for row in rows:
  51. url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
  52. result.append(url)
  53. return result
  54. def get_details_urls(self, obj):
  55. result = []
  56. rows = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).values('image__picture')
  57. for row in rows:
  58. url = '%s%s' % (settings.SERVER_DOMAIN, row['image__picture'])
  59. result.append(url)
  60. return result
  61. def get_show_image(self, obj):
  62. if obj.show_image:
  63. return obj.show_image.get_path()
  64. return ''
  65. def get_price(self, obj):
  66. return Formater.formatValueShow(obj.price)
  67. def get_vip_price(self, obj):
  68. return Formater.formatValueShow(obj.vip_price)
  69. class Meta:
  70. model = Commodity
  71. fields = (
  72. 'id', 'name', 'price', 'vip_price', 'point_price', 'sale_count', 'is_collection', 'carousel_urls', 'details_urls', 'show_image',
  73. )
  74. class CommodityCategorySerializer(serializers.ModelSerializer):
  75. label = serializers.CharField(source='name', read_only=True)
  76. class Meta:
  77. model = Option
  78. fields = ('id', 'label', )