serializers.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 create(self, validated_data):
  29. instance = super(EmployeeSerializer, self).create(validated_data)
  30. instance.set_password(validated_data['password'])
  31. instance.save()
  32. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加员工[%s],id=%s" % (instance.name, instance.id),validated_data)
  33. return instance
  34. def update(self, instance, validated_data):
  35. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改员工[%s],id=%s" % (instance.name, instance.id),validated_data)
  36. instance = super(EmployeeSerializer, self).update(instance, validated_data)
  37. return instance
  38. class EmployeeSafeSerializer(serializers.ModelSerializer):
  39. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  40. branch_text = serializers.CharField(source='branch.name', read_only=True)
  41. enabled_text = serializers.SerializerMethodField()
  42. class Meta:
  43. model = User
  44. exclude = ('password', )
  45. def get_enabled_text(self, obj):
  46. if obj.enabled:
  47. return u'是'
  48. return u'否'