serializers.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #coding=utf-8
  2. from rest_framework import serializers
  3. from django.db.models import Q
  4. from apps.serializer_errors import dump_serializer_errors
  5. from libs.booleancharfield import BooleanCharField
  6. from apps.exceptions import CustomError
  7. from apps.foundation.models import BizLog
  8. from models import Option
  9. class OptionSerializer(serializers.ModelSerializer):
  10. enabled_text = BooleanCharField(source='enabled', read_only=True)
  11. type_text = serializers.CharField(source='get_type_display', read_only=True)
  12. class Meta:
  13. model = Option
  14. fields = '__all__'
  15. #fields = ('id', 'name', 'notes', 'enabled')
  16. @staticmethod
  17. def factory(user, data,id=None):
  18. if id:
  19. instance = Option.getById(id)
  20. else:
  21. instance = None
  22. serializer = OptionSerializer(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. item = Option.objects.filter(type=validated_data['type'], name=validated_data['name']).first()
  32. if item:
  33. raise CustomError(u'类型为[%s]的自定义项[%s]已存在' % (Option.getTypeText(validated_data['type']), validated_data['name']))
  34. instance = super(OptionSerializer, self).create(validated_data)
  35. BizLog.objects.addnew(
  36. self.user,
  37. BizLog.INSERT,
  38. u"添加自定义项[%s],id=%d" % (instance.name, instance.id),
  39. validated_data
  40. )
  41. return instance
  42. def update(self, instance, validated_data):
  43. if validated_data['type'] != instance.type:
  44. raise CustomError(u'禁止修改类别')
  45. item = Option.objects.filter(Q(type=instance.type), Q(name=validated_data['name']), ~Q(id=instance.id)).first()
  46. if item:
  47. raise CustomError(u'类型为[%s]的自定义项[%s]已存在' % (Option.getTypeText(validated_data['type']), validated_data['name']))
  48. BizLog.objects.addnew(
  49. self.user,
  50. BizLog.UPDATE,
  51. u"修改自定义项[%s],id=%s" % (validated_data['name'], id),
  52. validated_data
  53. )
  54. instance = super(OptionSerializer, self).update(instance, validated_data)
  55. return instance