operations_project/apps/accounts/serializers.py
2025-05-13 18:36:06 +08:00

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