from rest_framework import serializers from .models import User, Role, TeacherStudentRelation, Institution, Department class UserSerializer(serializers.ModelSerializer): institution_name = serializers.CharField(source='institution.name', read_only=True) department_name = serializers.CharField(source='department.name', read_only=True) class Meta: model = User fields = [ 'id', 'username', 'real_name', 'phone', 'avatar', 'gender', 'role_type', 'institution', 'institution_name', 'department', 'department_name', 'title_name', 'practice_years', 'major', 'training_stage', 'learning_target', 'competency_profile', 'weak_dimensions', 'strong_dimensions', 'ai_preference', 'total_training_count', 'total_case_count', 'current_level', 'status', 'last_login_time', 'created_at', 'updated_at' ] extra_kwargs = { 'password': {'write_only': True}, } class UserCreateSerializer(serializers.ModelSerializer): class Meta: model = User fields = [ 'id', 'username', 'password', 'real_name', 'phone', 'gender', 'role_type', 'institution', 'department', 'title_name', 'major', 'training_stage', 'status' ] extra_kwargs = { 'password': {'write_only': True}, } def create(self, validated_data): user = User.objects.create_user(**validated_data) return user class UserUpdateSerializer(serializers.ModelSerializer): class Meta: model = User fields = [ 'real_name', 'phone', 'avatar', 'gender', 'role_type', 'institution', 'department', 'title_name', 'practice_years', 'major', 'training_stage', 'learning_target', 'status' ] class StudentProfileConfigSerializer(serializers.Serializer): """医学生信息配置(首次进入系统)——科室、专业职称、执业年限""" department = serializers.PrimaryKeyRelatedField( queryset=Department.objects.all(), help_text='执业科室 ID' ) title_name = serializers.CharField(max_length=50, help_text='专业职称,如:住院医师') practice_years = serializers.CharField(max_length=20, help_text='执业年限,如:1-3年') def validate_department(self, value): """科室必须属于当前用户所在机构""" user = self.context['request'].user if user.institution_id and value.institution_id != user.institution_id: raise serializers.ValidationError('所选科室不属于您所在的机构') return value class UserPasswordSerializer(serializers.Serializer): """密码修改序列化器""" old_password = serializers.CharField(required=True, write_only=True) new_password = serializers.CharField(required=True, write_only=True, min_length=6) class RoleSerializer(serializers.ModelSerializer): class Meta: model = Role fields = '__all__' class TeacherStudentRelationSerializer(serializers.ModelSerializer): teacher_name = serializers.CharField(source='teacher.real_name', read_only=True) student_name = serializers.CharField(source='student.real_name', read_only=True) class Meta: model = TeacherStudentRelation fields = '__all__' class InstitutionSerializer(serializers.ModelSerializer): class Meta: model = Institution fields = '__all__' class DepartmentSerializer(serializers.ModelSerializer): institution_name = serializers.CharField(source='institution.name', read_only=True) class Meta: model = Department fields = '__all__'