serializers.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # coding=utf-8
  2. from rest_framework import serializers
  3. from django.conf import settings
  4. from django.utils import timezone
  5. from apps.upload.models import Upload
  6. from .models import Commodity, CommodityImages
  7. from apps.base import Formater
  8. from utils.booleancharfield import PriceShowCharField
  9. class CommoditySerializer(serializers.ModelSerializer):
  10. create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,
  11. read_only=True)
  12. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  13. category_text = serializers.SerializerMethodField()
  14. main_image_url = serializers.CharField(source='main_image.picture', read_only=True)
  15. list_image_url = serializers.CharField(source='list_image.picture', read_only=True)
  16. detail_image = serializers.SerializerMethodField()
  17. price = PriceShowCharField()
  18. status_text = serializers.CharField(source='get_status_display', read_only=True)
  19. def get_category_text(self, obj):
  20. name = ''
  21. if obj.category:
  22. name = obj.category.name
  23. if obj.category.category:
  24. name = '{} — {}'.format(obj.category.category.name, name)
  25. if obj.category.category.category:
  26. name = '{} — {}'.format(obj.category.category.category.name, name)
  27. return name
  28. def get_detail_image(self, obj):
  29. count = CommodityImages.objects.filter(product=obj, type=CommodityImages.DETAILS).count()
  30. return count
  31. class Meta:
  32. model = Commodity
  33. fields = '__all__'
  34. def create(self, validated_data):
  35. validated_data['create_user'] = self.context['request'].user
  36. validated_data['price'] = Formater.formatPrice(self.initial_data['price'])
  37. validated_data['refresh_time'] = timezone.now()
  38. instance = super(CommoditySerializer, self).create(validated_data)
  39. return instance
  40. def update(self, instance, validated_data):
  41. validated_data['price'] = Formater.formatPrice(self.initial_data['price'])
  42. validated_data['refresh_time'] = timezone.now()
  43. instance = super(CommoditySerializer, self).update(instance, validated_data)
  44. return instance
  45. class WxCommoditySerizlizer(serializers.ModelSerializer):
  46. price = PriceShowCharField()
  47. list_image = serializers.SerializerMethodField()
  48. def get_list_image(self, obj):
  49. if obj.list_image:
  50. return obj.list_image.get_path()
  51. else:
  52. return ''
  53. class Meta:
  54. model = Commodity
  55. fields = ('id', 'name', 'introduce', 'price', 'list_image', )
  56. class WxCommodityDetailsSerializer(serializers.ModelSerializer):
  57. price = PriceShowCharField()
  58. main_image = serializers.SerializerMethodField()
  59. detail_images = serializers.SerializerMethodField()
  60. def get_main_image(self, obj):
  61. if obj.main_image:
  62. return obj.main_image.get_path()
  63. else:
  64. return ''
  65. def get_detail_images(self, obj):
  66. detail_images = CommodityImages.objects.filter(product=obj, type=CommodityImages.DETAILS)
  67. detail_image = []
  68. for i in detail_images:
  69. detail_image.append(i.image.get_path())
  70. return detail_image
  71. class Meta:
  72. model = Commodity
  73. fields = (
  74. 'id', 'name', 'price', 'introduce', 'main_image', 'detail_images', 'discount', 'stock'
  75. )