168 lines
4.6 KiB
Python
168 lines
4.6 KiB
Python
import re
|
|
|
|
from rest_framework import serializers
|
|
|
|
from .models import City, Organization, Permission, Province, 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=Dict.objects.filter(type__code='org_type').values_list('id','name'))
|
|
type_name = serializers.StringRelatedField(source='type', read_only=True)
|
|
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):
|
|
type_name = serializers.StringRelatedField(source='type', read_only=True)
|
|
class Meta:
|
|
model = Organization
|
|
fields = ['id', 'name', 'type_name', 'sort']
|
|
|
|
class FileSimpleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = File
|
|
fields = ['id', 'name', 'path', 'file']
|
|
|
|
|
|
class ProvinceSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Province
|
|
fields = '__all__'
|
|
|
|
|
|
class CitySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = City
|
|
fields = '__all__' |