serializers.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # coding=utf-8
  2. import json
  3. from rest_framework import serializers
  4. from apps.option.models import Option
  5. from django.conf import settings
  6. from utils.exceptions import CustomError
  7. from utils.booleancharfield import BooleanCharField, TimeCharField
  8. from apps.option.serializers import OptionSerializer
  9. from .models import ReportCustomer,NewCustomer,Review
  10. class ReportCustomerSerializer(serializers.ModelSerializer):
  11. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  12. report_status_text = serializers.CharField(source='get_report_status_display', read_only=True)
  13. source_text = serializers.CharField(source='source.name', read_only=True)
  14. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  15. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  16. project_text = serializers.SerializerMethodField()
  17. def get_project_text(self, obj):
  18. project = obj.project.all()
  19. return ','.join(project.values_list('name', flat=True))
  20. class Meta:
  21. model = ReportCustomer
  22. fields = '__all__'
  23. def create(self, validated_data):
  24. validated_data['create_user'] = self.context['request'].user
  25. store = self.context['request'].user.store
  26. if not store:
  27. raise CustomError('当前账号未绑定门店,禁止报备客户!')
  28. validated_data['store'] = store
  29. instance = super(ReportCustomerSerializer, self).create(validated_data)
  30. projects = self.initial_data['project']
  31. if projects:
  32. projects = json.loads(projects)
  33. else:
  34. raise CustomError(u'请选择项目!')
  35. for project in projects:
  36. instance.project.add(project)
  37. return instance
  38. def update(self, instance, validated_data):
  39. instance.project.clear()
  40. projects = self.initial_data['project']
  41. if projects:
  42. projects = json.loads(projects)
  43. else:
  44. raise CustomError(u'请选择项目')
  45. for project in projects:
  46. instance.project.add(project)
  47. instance = super(ReportCustomerSerializer, self).update(instance, validated_data)
  48. return instance
  49. class NewCustomerSerializer(serializers.ModelSerializer):
  50. track_user_text = serializers.CharField(source='track_user.name', read_only=True)
  51. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  52. potential_level_text = serializers.CharField(source='potential_level.name', read_only=True)
  53. stage_progress_text = serializers.CharField(source='stage_progress.name', read_only=True)
  54. create_time_f = TimeCharField(source='create_time', read_only=True)
  55. end_time_f = TimeCharField(source='end_time', read_only=True)
  56. next_time_f = TimeCharField(source='next_time', read_only=True)
  57. name = serializers.CharField(source='report_customer.name', read_only=True)
  58. tel = serializers.CharField(source='report_customer.tel', read_only=True)
  59. village = serializers.CharField(source='report_customer.village', read_only=True)
  60. address = serializers.CharField(source='report_customer.address', read_only=True)
  61. source_text = serializers.CharField(source='report_customer.source.name', read_only=True)
  62. project_text = serializers.CharField(source='report_customer.projects.name', read_only=True)
  63. gender_text = serializers.SerializerMethodField()
  64. def get_gender_text(self, obj):
  65. return settings.GENDER_CHOICES[obj.report_customer.gender - 1][1]
  66. class Meta:
  67. model = NewCustomer
  68. fields = '__all__'
  69. def create(self, validated_data):
  70. validated_data['create_user'] = self.context['request'].user
  71. instance = super(NewCustomerSerializer, self).create(validated_data)
  72. return instance
  73. def update(self, instance, validated_data):
  74. instance = super(NewCustomerSerializer, self).update(instance, validated_data)
  75. return instance
  76. class ReviewSerializer(serializers.ModelSerializer):
  77. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  78. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  79. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  80. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  81. check_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  82. is_giveup_text = BooleanCharField(source='enable', read_only=True)
  83. class Meta:
  84. model = Review
  85. fields = '__all__'