serializers.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #coding=utf-8
  2. from rest_framework import serializers
  3. from apps.exceptions import CustomError
  4. from django.db.models import Q
  5. from apps.foundation.models import BizLog
  6. from .models import *
  7. from apps.serializer_errors import dump_serializer_errors
  8. from apps.foundation.models import BizLog
  9. class EmployeeSerializer(serializers.ModelSerializer):
  10. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  11. class Meta:
  12. model = User
  13. fields = '__all__'
  14. @staticmethod
  15. def factory(user, data, id=None):
  16. if id:
  17. instance = User.getById(id)
  18. else:
  19. instance = None
  20. serializer = EmployeeSerializer(instance, data=data)
  21. serializer.user = user
  22. return serializer
  23. def validSave(self):
  24. if self.is_valid():
  25. return self.save()
  26. else:
  27. raise CustomError(dump_serializer_errors(self))
  28. def validate(self, data):
  29. if 'enabled' in data:
  30. data['enabled'] = True
  31. else:
  32. data['enabled'] = False
  33. return data
  34. def create(self, validated_data):
  35. instance = super(EmployeeSerializer, self).create(validated_data)
  36. instance.set_password(validated_data['password'])
  37. instance.save()
  38. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加员工[%s],id=%s" % (instance.name, instance.id),validated_data)
  39. return instance
  40. def update(self, instance, validated_data):
  41. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改员工[%s],id=%s" % (instance.name, instance.id),validated_data)
  42. instance = super(EmployeeSerializer, self).update(instance, validated_data)
  43. return instance
  44. class EmployeeSafeSerializer(serializers.ModelSerializer):
  45. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  46. branch_text = serializers.CharField(source='branch.name', read_only=True)
  47. enabled_text = serializers.SerializerMethodField()
  48. class Meta:
  49. model = User
  50. exclude = ('password', )
  51. def get_enabled_text(self, obj):
  52. if obj.enabled:
  53. return u'是'
  54. return u'否'