examtest/test_server/rbac/serializers/user_serializer.py

94 lines
3.2 KiB
Python

from rest_framework import serializers
from ..models import UserProfile
import re
class UserListSerializer(serializers.ModelSerializer):
"""
用户列表的序列化
"""
# roles = serializers.SerializerMethodField()
date_joined = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
department_name = serializers.StringRelatedField(source='department')
roles_ = serializers.StringRelatedField(source='roles', many=True)
bcompany_name = serializers.StringRelatedField(source='bcompany')
# def get_roles(self, obj):
# return obj.roles.values()
class Meta:
model = UserProfile
fields = ['id', 'username', 'name', 'department', 'position',
'is_active', 'roles', 'date_joined', 'is_superuser','department_name', 'avatar', 'roles_', 'pname', 'bcompany_name']
# depth = 1
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.select_related('superior','department', 'bcompany')
queryset = queryset.prefetch_related('roles',)
return queryset
class UserModifySerializer(serializers.ModelSerializer):
"""
用户编辑的序列化
"""
mobile = serializers.CharField(max_length=11, read_only=True)
class Meta:
model = UserProfile
fields = ['id', 'username', 'name', 'mobile', 'email', 'avatar', 'department', 'position', 'superior',
'is_active', 'roles', 'pname', 'bcompany']
def validate_mobile(self, mobile):
REGEX_MOBILE = "^1[358]\d{9}$|^147\d{8}$|^176\d{8}$"
if not re.match(REGEX_MOBILE, mobile):
raise serializers.ValidationError("手机号码不合法")
return mobile
class UserCreateSerializer(serializers.ModelSerializer):
"""
创建用户序列化
"""
username = serializers.CharField(required=True)
mobile = serializers.CharField(max_length=11, read_only=True)
class Meta:
model = UserProfile
fields = ['id', 'username', 'name', 'mobile', 'email', 'department', 'position', 'is_active', 'roles',
'password','is_superuser', 'pname', 'bcompany']
def validate_username(self, username):
if UserProfile.objects.filter(username=username):
raise serializers.ValidationError(username + ' 账号已存在')
return username
def validate_mobile(self, mobile):
REGEX_MOBILE = "^1[358]\d{9}$|^147\d{8}$|^176\d{8}$"
if not re.match(REGEX_MOBILE, mobile):
raise serializers.ValidationError("手机号码不合法")
if UserProfile.objects.filter(mobile=mobile):
raise serializers.ValidationError("手机号已经被注册")
return mobile
# def create(self, validated_data):
# user = User(**validated_data)
# if validated_data['password']:
# user.set_password(validated_data['password'])
# else:
# user.set_password('password')
# user.save()
# return user
class UserInfoListSerializer(serializers.ModelSerializer):
"""
公共users
"""
class Meta:
model = UserProfile
fields = ('id', 'name', 'mobile', 'email', 'position', 'username', 'is_active')