serializers.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. check_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  12. project_text = serializers.SerializerMethodField()
  13. def get_project_text(self, obj):
  14. return OptionSerializer(obj.project, many=True).data
  15. class Meta:
  16. model = ReportCustomer
  17. fields = '__all__'
  18. def create(self, validated_data):
  19. instance = super(ReportCustomerSerializer, self).create(validated_data)
  20. projects = self.initial_data['project']
  21. if projects:
  22. projects = json.loads(projects)
  23. else:
  24. raise CustomError(u'请选择项目')
  25. for project in projects:
  26. instance.project.add(project)
  27. return instance
  28. def update(self, instance, validated_data):
  29. instance = super(ReportCustomerSerializer, self).update(instance, 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