serializers.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # coding=utf-8
  2. import json
  3. from django.contrib.auth.models import Group, Permission
  4. from rest_framework import serializers
  5. from utils.exceptions import CustomError
  6. class PermissionSerializer(serializers.ModelSerializer):
  7. class Meta:
  8. model = Permission
  9. fields = ('id', 'name', )
  10. class GroupSerializer(serializers.ModelSerializer):
  11. employees = serializers.SerializerMethodField()
  12. permissions = PermissionSerializer(many=True, read_only=True)
  13. def get_employees(self, obj):
  14. users = obj.user_set.all()
  15. data = []
  16. for user in users:
  17. data.append(user.employee.name)
  18. return data
  19. class Meta:
  20. model = Group
  21. fields = ('id', 'display_name', 'employees', 'permissions', 'name')
  22. def create(self, validated_data):
  23. user = self.context['request'].user
  24. validated_data['tenant'] = user.employee.tenant
  25. validated_data['create_user'] = user
  26. validated_data['name'] = validated_data['name'] + '@' + str(validated_data['tenant'].id)
  27. group = Group.objects.filter(name=validated_data['name']).first()
  28. if group:
  29. raise CustomError(u'名称为[%s]的权限组已存在' % validated_data['display_name'])
  30. permissions = self.context['request'].data.get('permissions', None)
  31. if permissions:
  32. permissions = json.loads(permissions)
  33. else:
  34. permissions = []
  35. instance = super(GroupSerializer, self).create(validated_data)
  36. instance.permissions.set(permissions)
  37. return instance
  38. def update(self, instance, validated_data):
  39. validated_data['name'] = validated_data['name'] + '@' + str(instance.tenant_id)
  40. group = Group.objects.filter(name=validated_data['name']).exclude(id=instance.id).first()
  41. if group:
  42. raise CustomError(u'名称为[%s]的权限组已存在' % validated_data['display_name'])
  43. permissions = self.context['request'].data.get('permissions', None)
  44. if permissions:
  45. permissions = json.loads(permissions)
  46. else:
  47. permissions = []
  48. instance = super(GroupSerializer, self).update(instance, validated_data)
  49. instance.permissions.set(permissions)
  50. return instance
  51. class GroupDictSerializer(serializers.ModelSerializer):
  52. value = serializers.CharField(source='id', read_only=True)
  53. name = serializers.CharField(source='display_name', read_only=True)
  54. class Meta:
  55. model = Group
  56. fields = ('value', 'name', )