模型

class User(models.Model):
    """
    用户数据模型
  
    字段说明:
    - id: 用户唯一标识
    - username: 用户名
    - email: 邮箱
    - password_hash: 密码哈希值
    - is_active: 是否激活
    - is_staff: 是否为管理员
    - metadata: 用户额外信息
    - created_at: 创建时间
    - updated_at: 更新时间
    - invalid_tokens: 已失效的令牌列表
    """
    id = fields.IntField(pk=True, description="用户ID")
    username = fields.CharField(max_length=50, unique=True, description="用户名")
    email = fields.CharField(max_length=100, unique=True, null=True, description="邮箱")
    password_hash = fields.CharField(max_length=128, description="密码哈希值")
    is_active = fields.BooleanField(default=True, description="用户是否激活")
    is_staff = fields.BooleanField(default=False, description="是否为管理员")
    lastLogin = fields.DatetimeField(null=True, description="最后登录时间")
    ip = fields.CharField(max_length=255, null=True, description="IP地址")
    addr = fields.CharField(max_length=255, null=True, description="地址")
    avatar = fields.CharField(max_length=255, null=True, description="头像")
    created_at = fields.DatetimeField(auto_now_add=True, description="创建时间")
    updated_at = fields.DatetimeField(auto_now=True, description="更新时间")
  
    # 关联角色表
    roles = fields.ManyToManyField(
        "models.Role",
        related_name="users",
        through="user_roles",
        description="用户角色"
    )

    class Meta:
        table = "users"
        ordering = ["-created_at"]

检查

from tortoise.functions import Count

async def init_db():
    # 方法1:使用 .exists() 方法
    has_users = await User.exists()
  
    # 方法2:使用 .count() 方法
    user_count = await User.all().count()
  
    # 方法3:使用聚合函数
    result = await User.annotate(count=Count('id')).values('count')
    count_value = result[0]['count'] if result else 0
  
    if not has_users:  # 或 if user_count == 0:
        # 创建初始管理员用户
        admin_user = await User.create(
            username="admin",
            email="admin@example.com",
            password_hash="hashed_password_here",  # 记得使用安全的哈希方法
            is_active=True,
            is_staff=True
        )
        # 可以在这里添加初始角色分配等其他操作
        print("初始管理员用户已创建")
    else:
        print(f"数据库中已存在 {user_count} 个用户记录")