serializers.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #coding=utf-8
  2. from django.db.models import Q
  3. from django.utils import timezone
  4. from rest_framework import serializers
  5. from apps.exceptions import CustomError
  6. from apps.serializer_errors import dump_serializer_errors
  7. from models import Customer
  8. from apps.foundation.models import BizLog
  9. from apps import base
  10. class CustomerSerializer(serializers.ModelSerializer):
  11. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  12. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  13. class Meta:
  14. model = Customer
  15. fields = '__all__'
  16. @staticmethod
  17. def factory(user, data, id=None):
  18. if id:
  19. instance = Customer.getById(id)
  20. else:
  21. instance = None
  22. serializer = CustomerSerializer(instance, data=data)
  23. serializer.user = user
  24. return serializer
  25. def validSave(self):
  26. if self.is_valid():
  27. return self.save()
  28. else:
  29. raise CustomError(dump_serializer_errors(self))
  30. def create(self, validated_data):
  31. validated_data['create_user'] = self.user
  32. item = Customer.objects.filter(mobile=validated_data['mobile']).first()
  33. if item:
  34. raise CustomError(u'手机号[%s]已存在' % validated_data['mobile'])
  35. instance = super(CustomerSerializer, self).create(validated_data)
  36. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加客户档案[%s],id=%d" % (
  37. instance.name, instance.id), validated_data)
  38. return instance
  39. def update(self, instance, validated_data):
  40. item = Customer.objects.filter(Q(mobile=validated_data['mobile']), ~Q(id=instance.id)).first()
  41. if item:
  42. raise CustomError(u'手机号[%s]已存在' % validated_data['mobile'])
  43. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改供客户档案[%s],id=%d" % (
  44. instance.name, instance.id), validated_data)
  45. instance = super(CustomerSerializer, self).update(instance, validated_data)
  46. return instance