import re from rest_framework import serializers from .models import Organization, Permission, Role, User, Position, DictType, Dict, File class FileSerializer(serializers.ModelSerializer): class Meta: model = File fields = "__all__" class FileListSerializer(serializers.ModelSerializer): class Meta: model = File fields = ['name'] class DictTypeSerializer(serializers.ModelSerializer): """ 数据字典类型序列化 """ class Meta: model = DictType fields = '__all__' class DictSerializer(serializers.ModelSerializer): """ 数据字典序列化 """ class Meta: model = Dict fields = '__all__' class PositionSerializer(serializers.ModelSerializer): """ 岗位序列化 """ class Meta: model = Position fields = '__all__' class RoleSerializer(serializers.ModelSerializer): """ 角色序列化 """ class Meta: model = Role fields = '__all__' class RoleListSerializer(serializers.ModelSerializer): """ 角色序列化 """ class Meta: model = Role fields = ['id','name'] class PermissionSerializer(serializers.ModelSerializer): """ 权限序列化 """ class Meta: model = Permission fields = '__all__' class OrganizationSerializer(serializers.ModelSerializer): """ 组织架构序列化 """ type = serializers.ChoiceField( choices=Organization.organization_type_choices, default='部门') class Meta: model = Organization fields = '__all__' class UserListSerializer(serializers.ModelSerializer): """ 用户列表序列化 """ dept_name = serializers.StringRelatedField(source='dept') roles_ = RoleListSerializer(source='roles', many=True, read_only=True) class Meta: model = User fields = ('id', 'name', 'phone', 'email', 'position', 'username', 'is_active', 'date_joined', 'dept_name', 'dept', 'roles', 'avatar','roles_', 'is_superuser') @staticmethod def setup_eager_loading(queryset): """ Perform necessary eager loading of data. """ queryset = queryset.select_related('superior','dept') queryset = queryset.prefetch_related('roles',) return queryset class UserModifySerializer(serializers.ModelSerializer): """ 用户编辑序列化 """ phone = serializers.CharField(max_length=11, read_only=True) class Meta: model = User fields = ['id', 'username', 'name', 'phone', 'email', 'dept', 'position', 'avatar', 'is_active', 'roles', 'is_superuser'] def validate_phone(self, phone): re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$' if not re.match(re_phone, phone): raise serializers.ValidationError('手机号码不合法') return phone class UserCreateSerializer(serializers.ModelSerializer): """ 创建用户序列化 """ username = serializers.CharField(required=True) phone = serializers.CharField(max_length=11, read_only=True) class Meta: model = User fields = ['id', 'username', 'name', 'phone', 'email', 'dept', 'position', 'avatar', 'is_active', 'roles', 'is_superuser'] def validate_username(self, username): if User.objects.filter(username=username): raise serializers.ValidationError(username + ' 账号已存在') return username def validate_phone(self, phone): re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$' if not re.match(re_phone, phone): raise serializers.ValidationError('手机号码不合法') if User.objects.filter(phone=phone): raise serializers.ValidationError('手机号已经被注册') return phone class UserSimpleSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'name', 'username'] class OrganizationSimpleSerializer(serializers.ModelSerializer): class Meta: model = Organization fields = ['id', 'name']