serializers.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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
  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. validated_data['store'] = store
  27. instance = super(ReportCustomerSerializer, self).create(validated_data)
  28. projects = self.initial_data['project']
  29. if projects:
  30. projects = json.loads(projects)
  31. else:
  32. raise CustomError(u'请选择项目!')
  33. for project in projects:
  34. instance.project.add(project)
  35. return instance
  36. def update(self, instance, validated_data):
  37. instance.project.clear()
  38. projects = self.initial_data['project']
  39. if projects:
  40. projects = json.loads(projects)
  41. else:
  42. raise CustomError(u'请选择项目')
  43. for project in projects:
  44. instance.project.add(project)
  45. instance = super(ReportCustomerSerializer, self).update(instance, validated_data)
  46. return instance