feat: cms users institution department manager
This commit is contained in:
+24
-10
@@ -3,10 +3,14 @@ from django.db import models
|
||||
from django.utils import timezone
|
||||
from django.contrib.auth.base_user import BaseUserManager
|
||||
|
||||
from apps.common.models import BaseModel
|
||||
from apps.common.models import BaseModel, SoftDeleteModel
|
||||
|
||||
|
||||
class UserManager(BaseUserManager):
|
||||
def get_queryset(self):
|
||||
# 默认管理器只返回未删除(未停用)用户;停用用户无法登录/被列出
|
||||
return super().get_queryset().filter(is_deleted=False)
|
||||
|
||||
def create_user(self, username, password=None, **extra_fields):
|
||||
if not username:
|
||||
raise ValueError('用户名不能为空')
|
||||
@@ -70,7 +74,12 @@ class User(AbstractBaseUser, PermissionsMixin, BaseModel):
|
||||
is_active = models.BooleanField('active', default=True)
|
||||
date_joined = models.DateTimeField('date joined', default=timezone.now)
|
||||
|
||||
objects = UserManager()
|
||||
# 软删除(停用 = 逻辑删除)
|
||||
is_deleted = models.BooleanField('是否删除', default=False, db_index=True)
|
||||
deleted_at = models.DateTimeField('删除时间', null=True, blank=True)
|
||||
|
||||
objects = UserManager() # 默认:仅未删除
|
||||
all_objects = BaseUserManager() # 含已删除(管理/恢复用)
|
||||
|
||||
USERNAME_FIELD = 'username'
|
||||
REQUIRED_FIELDS = []
|
||||
@@ -83,6 +92,15 @@ class User(AbstractBaseUser, PermissionsMixin, BaseModel):
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
def delete(self, using=None, keep_parents=False):
|
||||
"""停用 = 逻辑删除(不物理删除,避免级联丢数据)。"""
|
||||
self.is_deleted = True
|
||||
self.deleted_at = timezone.now()
|
||||
self.save(using=using, update_fields=['is_deleted', 'deleted_at', 'updated_at'])
|
||||
|
||||
def hard_delete(self, using=None, keep_parents=False):
|
||||
super().delete(using=using, keep_parents=keep_parents)
|
||||
|
||||
|
||||
class Role(BaseModel):
|
||||
"""角色表"""
|
||||
@@ -99,7 +117,7 @@ class Role(BaseModel):
|
||||
return self.role_name
|
||||
|
||||
|
||||
class TeacherStudentRelation(BaseModel):
|
||||
class TeacherStudentRelation(SoftDeleteModel):
|
||||
"""师生关系表"""
|
||||
STATUS_CHOICES = [
|
||||
(0, '已结束'),
|
||||
@@ -129,7 +147,7 @@ class TeacherStudentRelation(BaseModel):
|
||||
return f"{self.teacher.real_name or self.teacher.username} -> {self.student.real_name or self.student.username}"
|
||||
|
||||
|
||||
class Institution(BaseModel):
|
||||
class Institution(SoftDeleteModel):
|
||||
"""医疗机构表"""
|
||||
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
@@ -153,13 +171,9 @@ class Institution(BaseModel):
|
||||
return self.name
|
||||
|
||||
|
||||
class Department(BaseModel):
|
||||
"""科室表"""
|
||||
class Department(SoftDeleteModel):
|
||||
"""科室表(全局分类表,与机构无关;仅超级管理员维护,用于给病例分类)"""
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
institution = models.ForeignKey(
|
||||
Institution, on_delete=models.CASCADE,
|
||||
verbose_name='所属机构'
|
||||
)
|
||||
name = models.CharField('科室名称', max_length=100)
|
||||
category = models.CharField('科室分类', max_length=50, blank=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user