serializers.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # coding=utf-8
  2. import datetime
  3. from rest_framework import serializers
  4. from .models import *
  5. from django.conf import settings
  6. from utils.booleancharfield import PriceShowCharField
  7. from apps.base import Formater
  8. from utils.booleancharfield import BooleanCharField
  9. class OrderSerializer(serializers.ModelSerializer):
  10. coupon_name = serializers.CharField(source='coupon.name', read_only=True)
  11. commodity_name = serializers.CharField(source='commodity.name', read_only=True)
  12. student_text = serializers.CharField(source='student.name', read_only=True)
  13. create_user_text = serializers.CharField(source='create_user.username', read_only=True)
  14. status_text = serializers.CharField(source='get_status_display', read_only=True)
  15. total_amount = PriceShowCharField(read_only=True)
  16. actual_amount = PriceShowCharField(read_only=True)
  17. class_text = serializers.SerializerMethodField()
  18. def get_class_text(self, obj):
  19. name = '{}-{}-{}'.format(obj.student.school.name, obj.student.classes.grade.name, obj.student.classes.name, )
  20. return name
  21. class Meta:
  22. model = Order
  23. fields = '__all__'
  24. def create(self, validated_data):
  25. validated_data['create_user'] = self.context['request'].user
  26. instance = super(OrderSerializer, self).create(validated_data)
  27. instance.no = instance.get_no()
  28. instance.save()
  29. return instance
  30. class CouponSerializer(serializers.ModelSerializer):
  31. create_user_text = serializers.CharField(source='create_user.username', read_only=True)
  32. amount = PriceShowCharField()
  33. enable_text = BooleanCharField(source='enable', read_only=True)
  34. category_text = serializers.SerializerMethodField()
  35. school_text = serializers.SerializerMethodField()
  36. category_ids = serializers.SerializerMethodField()
  37. def get_category_ids(self, obj):
  38. return obj.category.split(',')
  39. def get_school_text(self, obj):
  40. name = ''
  41. if obj.school:
  42. rows = School.objects.filter(id__in=obj.school.split(','))
  43. for row in rows:
  44. name += row.name + ','
  45. return name
  46. def get_category_text(self, obj):
  47. name = ''
  48. if obj.category:
  49. rows = CommodityLevel.objects.filter(id__in=obj.category.split(','))
  50. for row in rows:
  51. name1 = row.name
  52. if row.category:
  53. name1 = '{}-{}'.format(row.category.name, name1)
  54. if row.category.category:
  55. name1 = '{}-{}'.format(row.category.category.name, name1)
  56. name += name1 + ','
  57. return name
  58. class Meta:
  59. model = Coupon
  60. fields = '__all__'
  61. def create(self, validated_data):
  62. validated_data['create_user'] = self.context['request'].user
  63. validated_data['amount'] = Formater.formatPrice(validated_data['amount'])
  64. instance = super(CouponSerializer, self).create(validated_data)
  65. return instance
  66. def update(self, instance, validated_data):
  67. validated_data['amount'] = Formater.formatPrice(validated_data['amount'])
  68. instance = super(CouponSerializer, self).update(instance, validated_data)
  69. return instance
  70. class ShoppingCartSerializer(serializers.ModelSerializer):
  71. name = serializers.CharField(source='commodity.name', read_only=True)
  72. stock = serializers.CharField(source='commodity.stock', read_only=True)
  73. price = serializers.SerializerMethodField()
  74. images = serializers.SerializerMethodField()
  75. def get_price(self, obj):
  76. return Formater.formatPriceShow(obj.commodity.price * obj.commodity.discount / 100)
  77. def get_images(self, obj):
  78. if obj.commodity.main_image:
  79. img = Upload.objects.filter(id=obj.commodity.main_image.id).first()
  80. if img:
  81. return img.get_path()
  82. return ''
  83. class Meta:
  84. model = ShoppingCart
  85. fields = (
  86. 'id', 'name', 'price', 'stock', 'images', 'quantity', 'commodity'
  87. )
  88. def create(self, validated_data):
  89. validated_data['create_user'] = self.context['request'].user
  90. validated_data['quantity'] = validated_data.get('quantity')
  91. instance = ShoppingCart.objects.filter(commodity=self.initial_data['commodity'],
  92. create_user=validated_data['create_user']).first()
  93. if instance:
  94. instance.quantity += validated_data['quantity']
  95. instance.save()
  96. else:
  97. instance = super(ShoppingCartSerializer, self).create(validated_data)
  98. return instance