feat: cms users institution department manager
This commit is contained in:
+44
-11
@@ -1,3 +1,5 @@
|
||||
import re
|
||||
|
||||
from rest_framework import serializers
|
||||
from .models import User, Role, TeacherStudentRelation, Institution, Department
|
||||
|
||||
@@ -49,21 +51,54 @@ class UserUpdateSerializer(serializers.ModelSerializer):
|
||||
]
|
||||
|
||||
|
||||
class ProfileUpdateSerializer(serializers.ModelSerializer):
|
||||
"""个人信息更新(移动端个人中心)——仅允许用户自助修改的字段。
|
||||
|
||||
白名单字段:username / real_name / phone / avatar / gender / department /
|
||||
title_name / major / practice_years / training_stage / learning_target。
|
||||
机构(institution)、角色(role_type)、is_superuser 等不在字段内,无法被用户修改。
|
||||
"""
|
||||
# 显式声明以去掉 ModelSerializer 自动加的 UniqueValidator,改用自定义唯一性校验
|
||||
username = serializers.CharField(max_length=50)
|
||||
phone = serializers.CharField(max_length=20, required=False, allow_blank=True)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
'username', 'real_name', 'phone', 'avatar', 'gender',
|
||||
'department', 'title_name', 'major', 'practice_years',
|
||||
'training_stage', 'learning_target',
|
||||
]
|
||||
|
||||
def validate_username(self, value):
|
||||
value = (value or '').strip()
|
||||
if not value:
|
||||
raise serializers.ValidationError('用户名不能为空')
|
||||
if User.objects.filter(username=value).exclude(pk=self.instance.pk).exists():
|
||||
raise serializers.ValidationError('用户名已被占用')
|
||||
return value
|
||||
|
||||
def validate_phone(self, value):
|
||||
value = (value or '').strip()
|
||||
if value:
|
||||
if not re.match(r'^1[3-9]\d{9}$', value):
|
||||
raise serializers.ValidationError('手机号格式不合法')
|
||||
if User.objects.filter(phone=value).exclude(pk=self.instance.pk).exists():
|
||||
raise serializers.ValidationError('手机号已被占用')
|
||||
return value
|
||||
|
||||
|
||||
class StudentProfileConfigSerializer(serializers.Serializer):
|
||||
"""医学生信息配置(首次进入系统)——科室、专业职称、执业年限"""
|
||||
"""医学生信息配置(首次进入系统)——科室、专业职称、执业年限。
|
||||
|
||||
科室为全局表,用户可自由选择想学习的科室,不再校验机构归属。
|
||||
"""
|
||||
department = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Department.objects.all(), help_text='执业科室 ID'
|
||||
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):
|
||||
"""密码修改序列化器"""
|
||||
@@ -93,8 +128,6 @@ class InstitutionSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class DepartmentSerializer(serializers.ModelSerializer):
|
||||
institution_name = serializers.CharField(source='institution.name', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Department
|
||||
fields = '__all__'
|
||||
|
||||
Reference in New Issue
Block a user