94 lines
3.2 KiB
Python
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')
|