import uuid from rest_framework import serializers from .role_serializer import RoleListSerializer from ..models import UserProfile, Company import re class UserListSerializer(serializers.ModelSerializer): """ 用户列表的序列化 """ roles = serializers.SerializerMethodField() company = serializers.SerializerMethodField() parent_user = serializers.SerializerMethodField() def get_roles(self, obj): return obj.roles.values() def get_company(self, obj): return obj.company.values() def get_parent_user(self, obj): if obj.parent_id: parent = UserProfile.objects.filter(id=obj.parent_id).values() else: parent = None return parent class Meta: model = UserProfile fields = ["id", "username", "name", "mobile", "email", "image", "area_name", "is_active", "roles", "is_superuser", 'companyMid', 'company', 'label', 'is_sub', 'parent_user'] depth = 1 class UserModifySerializer(serializers.ModelSerializer): """ 用户编辑的序列化 """ mobile = serializers.CharField(max_length=11) username = serializers.CharField(required=True, allow_blank=False) class Meta: model = UserProfile fields = ["id", "username", "name", "mobile", "email", "image", "is_active", "roles", "is_superuser", 'label', 'company'] def validate_username(self, value): return value def validate_mobile(self, mobile): REGEX_MOBILE = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$" if not re.match(REGEX_MOBILE, mobile): raise serializers.ValidationError("手机号码不合法") user = UserProfile.objects.filter(mobile=mobile).first() if user: user_id = self.context['view'].kwargs.get("pk", "0") # print(user_id, user.id) if int(user_id) == user.id: return mobile else: raise serializers.ValidationError("手机号 "+mobile+" 已经被注册") return mobile class UserCreateSerializer(serializers.ModelSerializer): """ 创建用户序列化 """ username = serializers.CharField(required=True, allow_blank=False) mobile = serializers.CharField(max_length=11) class Meta: model = UserProfile fields = ["id", "MainId", "username", "name", "mobile", "email", "is_active", "area_name", "roles", "password", "is_superuser", "companyMid", "company", 'label'] def validate_username(self, username): if UserProfile.objects.filter(username=username): raise serializers.ValidationError("用户名 "+username+" 已存在") return username def validate_mobile(self, mobile): REGEX_MOBILE = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$" if not re.match(REGEX_MOBILE, mobile): raise serializers.ValidationError("手机号码不合法") if UserProfile.objects.filter(mobile=mobile): raise serializers.ValidationError("手机号 "+mobile+" 已经被注册") return mobile def perform_create(self, serializer): usermid = uuid.uuid4() serializer.save(MainId=usermid) class UserInfoListSerializer(serializers.ModelSerializer): """ 公共users """ class Meta: model = UserProfile fields = ("id", "name", "mobile", "email") class CompanySerializer(serializers.ModelSerializer): """ 公司序列化 """ class Meta: model = Company fields = "__all__" class CompanyRoleSerializer(serializers.ModelSerializer): """ 公司角色序列化 """ roles = RoleListSerializer(many=True) class Meta: model = Company fields = "__all__"