serializers.py 4.5 KB

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