Files
2026-06-13 13:21:53 +08:00

131 lines
4.6 KiB
Python

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))