serializers.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. coupon_deduction = PriceShowCharField(read_only=True)
  18. class_text = serializers.SerializerMethodField()
  19. def get_class_text(self, obj):
  20. name = '{}-{}-{}'.format(obj.student.school.name, obj.student.classes.grade.name, obj.student.classes.name, )
  21. return name
  22. class Meta:
  23. model = Order
  24. fields = '__all__'
  25. def create(self, validated_data):
  26. validated_data['create_user'] = self.context['request'].user
  27. instance = super(OrderSerializer, self).create(validated_data)
  28. instance.no = instance.get_no()
  29. instance.save()
  30. return instance
  31. class CouponSerializer(serializers.ModelSerializer):
  32. create_user_text = serializers.CharField(source='create_user.username', read_only=True)
  33. amount = PriceShowCharField()
  34. enable_text = BooleanCharField(source='enable', read_only=True)
  35. category_text = serializers.SerializerMethodField()
  36. school_text = serializers.SerializerMethodField()
  37. category_ids = serializers.SerializerMethodField()
  38. def get_category_ids(self, obj):
  39. return obj.category.split(',')
  40. def get_school_text(self, obj):
  41. name = ''
  42. if obj.school:
  43. rows = School.objects.filter(id__in=obj.school.split(','))
  44. for row in rows:
  45. name += row.name + ','
  46. return name
  47. def get_category_text(self, obj):
  48. name = ''
  49. if obj.category:
  50. rows = CommodityLevel.objects.filter(id__in=obj.category.split(','))
  51. for row in rows:
  52. name1 = row.name
  53. if row.category:
  54. name1 = '{}-{}'.format(row.category.name, name1)
  55. if row.category.category:
  56. name1 = '{}-{}'.format(row.category.category.name, name1)
  57. name += name1 + ','
  58. return name
  59. class Meta:
  60. model = Coupon
  61. fields = '__all__'
  62. def create(self, validated_data):
  63. validated_data['create_user'] = self.context['request'].user
  64. validated_data['amount'] = Formater.formatPrice(validated_data['amount'])
  65. instance = super(CouponSerializer, self).create(validated_data)
  66. return instance
  67. def update(self, instance, validated_data):
  68. validated_data['amount'] = Formater.formatPrice(validated_data['amount'])
  69. instance = super(CouponSerializer, self).update(instance, validated_data)
  70. return instance
  71. class ShoppingCartSerializer(serializers.ModelSerializer):
  72. name = serializers.CharField(source='commodity.name', read_only=True)
  73. stock = serializers.CharField(source='commodity.stock', read_only=True)
  74. price = serializers.SerializerMethodField()
  75. images = serializers.SerializerMethodField()
  76. def get_price(self, obj):
  77. return Formater.formatPriceShow(obj.commodity.price * obj.commodity.discount / 100)
  78. def get_images(self, obj):
  79. if obj.commodity.main_image:
  80. img = Upload.objects.filter(id=obj.commodity.main_image.id).first()
  81. if img:
  82. return img.get_path()
  83. return ''
  84. class Meta:
  85. model = ShoppingCart
  86. fields = (
  87. 'id', 'name', 'price', 'stock', 'images', 'quantity', 'commodity'
  88. )
  89. def create(self, validated_data):
  90. validated_data['create_user'] = self.context['request'].user
  91. validated_data['quantity'] = validated_data.get('quantity')
  92. instance = ShoppingCart.objects.filter(commodity=self.initial_data['commodity'],
  93. create_user=validated_data['create_user']).first()
  94. if instance:
  95. instance.quantity += validated_data['quantity']
  96. instance.save()
  97. else:
  98. instance = super(ShoppingCartSerializer, self).create(validated_data)
  99. return instance