serializers.py 4.3 KB

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