131 lines
4.6 KiB
Python
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))
|