serializers.py 3.9 KB

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