from rest_framework import serializers from apps.accounts.models import User, UserProfile class UserProfileSerializer(serializers.ModelSerializer): """用户档案序列化器""" class Meta: model = UserProfile fields = ['department', 'group', 'auto_recommend_reply'] class UserSerializer(serializers.ModelSerializer): """用户序列化器""" profile = UserProfileSerializer(read_only=True) class Meta: model = User fields = [ 'id', 'username', 'email', 'name', 'role', 'department', 'group', 'profile', 'is_active', 'date_joined', 'last_login' ] read_only_fields = ['id', 'date_joined', 'last_login'] class UserCreateSerializer(serializers.ModelSerializer): """创建用户的序列化器""" password = serializers.CharField(write_only=True, required=True, style={'input_type': 'password'}) class Meta: model = User fields = [ 'id', 'username', 'email', 'name', 'password', 'role', 'department', 'group', 'is_active' ] read_only_fields = ['id'] def create(self, validated_data): password = validated_data.pop('password') user = User(**validated_data) user.set_password(password) user.save() # 创建用户档案 UserProfile.objects.create( user=user, department=user.department, group=user.group ) return user class PasswordChangeSerializer(serializers.Serializer): """修改密码序列化器""" old_password = serializers.CharField(required=True) new_password = serializers.CharField(required=True) def validate_old_password(self, value): user = self.context['request'].user if not user.check_password(value): raise serializers.ValidationError("旧密码不正确") return value