import os from django.core.management.base import BaseCommand from django.contrib.auth import get_user_model from apps.user.models import TeacherStudentRelation User = get_user_model() class Command(BaseCommand): help = '初始化系统用户数据' def add_arguments(self, parser): parser.add_argument( '--reset', action='store_true', help='重置所有用户数据', ) def handle(self, *args, **options): if options['reset']: self.stdout.write(self.style.WARNING('正在清除所有用户...')) User.objects.filter(is_superuser=False).delete() self.stdout.write(self.style.SUCCESS('普通用户已清除')) # 创建超级管理员 self._create_superadmin() # 创建测试角色用户(覆盖五类角色:医院管理员/内容管理员/带教医生/学生) self._create_test_users() # 师生关系(只在 doctor 与 student 之间) self._create_relation() self.stdout.write(self.style.SUCCESS('\n[完成] 用户初始化完成')) def _create_superadmin(self): """创建超级管理员""" username = 'admin' password = 'admin123' user, created = User.objects.get_or_create( username=username, defaults={ 'is_staff': True, 'is_superuser': True, 'real_name': '系统管理员', 'role_type': 'super_admin', 'status': 1, } ) user.set_password(password) user.save() if created: self.stdout.write(self.style.SUCCESS(f'[创建] 超级管理员: {username} / {password}')) else: self.stdout.write(self.style.WARNING(f'[重置] 管理员密码: {username} / {password}')) def _create_test_users(self): """创建测试用户""" test_users = [ { 'username': 'hospital_admin', 'password': 'hospital123', 'real_name': '医院管理员', 'role_type': 'hospital_admin', 'phone': '13800138003', }, { 'username': 'doctor1', 'password': 'doctor123', 'real_name': '张医生', 'role_type': 'doctor', 'phone': '13800138001', 'title_name': '主任医师', 'major': '心内科', }, { 'username': 'student1', 'password': 'student123', 'real_name': '李同学', 'role_type': 'student', 'phone': '13800138002', 'training_stage': '规培', 'learning_target': '掌握常见病诊断', }, { 'username': 'content_admin', 'password': 'content123', 'real_name': '内容管理员', 'role_type': 'content_admin', 'phone': '13800138004', }, ] for user_data in test_users: password = user_data.pop('password') user, created = User.objects.get_or_create( username=user_data['username'], defaults={**user_data, 'status': 1} ) user.set_password(password) user.save() if created: self.stdout.write( self.style.SUCCESS( f'[创建] 用户: {user_data["username"]} / {password} ({user_data["real_name"]})' ) ) else: self.stdout.write( self.style.WARNING( f'[已存在] 用户: {user_data["username"]} ({user_data["real_name"]})' ) ) def _create_relation(self): """初始化一条师生关系(带教医生 doctor1 → 学生 student1)。""" teacher = User.objects.filter(username='doctor1', role_type='doctor').first() student = User.objects.filter(username='student1', role_type='student').first() if not teacher or not student: return _, created = TeacherStudentRelation.objects.get_or_create( teacher=teacher, student=student, defaults={'relation_type': '指导', 'status': 1}, ) msg = '[创建] 师生关系: doctor1 → student1' if created else '[已存在] 师生关系: doctor1 → student1' self.stdout.write((self.style.SUCCESS if created else self.style.WARNING)(msg))