78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
from rest_framework import serializers
|
|
from apps.accounts.models import User, UserProfile, UserGoal
|
|
|
|
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
|
|
|
|
|
|
class UserGoalSerializer(serializers.ModelSerializer):
|
|
"""用户目标序列化器"""
|
|
|
|
class Meta:
|
|
model = UserGoal
|
|
fields = ['id', 'description', 'created_at', 'updated_at', 'is_active']
|
|
read_only_fields = ['id', 'created_at', 'updated_at']
|
|
|
|
def create(self, validated_data):
|
|
"""创建新目标时自动关联当前用户"""
|
|
user = self.context['request'].user
|
|
goal = UserGoal.objects.create(user=user, **validated_data)
|
|
return goal |