173 lines
4.2 KiB
Python
173 lines
4.2 KiB
Python
|
# _*_ coding : UTF-8 _*_
|
|||
|
# @Time : 2025/01/18 03:20
|
|||
|
# @UpdateTime : 2025/01/18 03:20
|
|||
|
# @Author : sonder
|
|||
|
# @File : user.py
|
|||
|
# @Software : PyCharm
|
|||
|
# @Comment : 本程序
|
|||
|
from tortoise import fields
|
|||
|
|
|||
|
from models.common import BaseModel
|
|||
|
|
|||
|
|
|||
|
class User(BaseModel):
|
|||
|
"""
|
|||
|
用户表模型。
|
|||
|
"""
|
|||
|
|
|||
|
username = fields.CharField(
|
|||
|
max_length=255,
|
|||
|
unique=True,
|
|||
|
description="用户名",
|
|||
|
source_field="username" # 映射到数据库字段 username
|
|||
|
)
|
|||
|
"""
|
|||
|
用户名。
|
|||
|
- 必须唯一。
|
|||
|
- 最大长度为 255 个字符。
|
|||
|
- 映射到数据库字段 username。
|
|||
|
"""
|
|||
|
|
|||
|
password = fields.CharField(
|
|||
|
max_length=255,
|
|||
|
description="密码",
|
|||
|
source_field="password" # 映射到数据库字段 password
|
|||
|
)
|
|||
|
"""
|
|||
|
密码。
|
|||
|
- 存储加密后的密码。
|
|||
|
- 最大长度为 255 个字符。
|
|||
|
- 映射到数据库字段 password。
|
|||
|
"""
|
|||
|
|
|||
|
email = fields.CharField(
|
|||
|
max_length=255,
|
|||
|
null=True,
|
|||
|
description="邮箱",
|
|||
|
source_field="email" # 映射到数据库字段 email
|
|||
|
)
|
|||
|
"""
|
|||
|
邮箱。
|
|||
|
- 最大长度为 255 个字符。
|
|||
|
- 允许为空。
|
|||
|
- 映射到数据库字段 email。
|
|||
|
"""
|
|||
|
|
|||
|
phone = fields.CharField(
|
|||
|
max_length=30,
|
|||
|
null=True,
|
|||
|
description="手机号",
|
|||
|
source_field="phone" # 映射到数据库字段 phone
|
|||
|
)
|
|||
|
"""
|
|||
|
手机号。
|
|||
|
- 最大长度为 30 个字符。
|
|||
|
- 允许为空。
|
|||
|
- 映射到数据库字段 phone。
|
|||
|
"""
|
|||
|
|
|||
|
nickname = fields.CharField(
|
|||
|
max_length=255,
|
|||
|
null=True,
|
|||
|
description="昵称",
|
|||
|
source_field="nickname" # 映射到数据库字段 nickname
|
|||
|
)
|
|||
|
"""
|
|||
|
昵称。
|
|||
|
- 最大长度为 255 个字符。
|
|||
|
- 允许为空。
|
|||
|
- 映射到数据库字段 nickname。
|
|||
|
"""
|
|||
|
|
|||
|
avatar = fields.CharField(
|
|||
|
max_length=255,
|
|||
|
null=True,
|
|||
|
description="头像",
|
|||
|
source_field="avatar" # 映射到数据库字段 avatar
|
|||
|
)
|
|||
|
"""
|
|||
|
头像。
|
|||
|
- 最大长度为 255 个字符。
|
|||
|
- 允许为空。
|
|||
|
- 映射到数据库字段 avatar。
|
|||
|
"""
|
|||
|
|
|||
|
gender = fields.SmallIntField(
|
|||
|
default=0,
|
|||
|
description="性别(1男,0女)",
|
|||
|
source_field="gender" # 映射到数据库字段 gender
|
|||
|
)
|
|||
|
"""
|
|||
|
性别。
|
|||
|
- 1:男
|
|||
|
- 0:女
|
|||
|
- 默认为 0。
|
|||
|
- 映射到数据库字段 gender。
|
|||
|
"""
|
|||
|
|
|||
|
status = fields.SmallIntField(
|
|||
|
default=1,
|
|||
|
description="用户状态(1启用,0禁用)",
|
|||
|
source_field="status" # 映射到数据库字段 status
|
|||
|
)
|
|||
|
"""
|
|||
|
用户状态。
|
|||
|
- 1:启用
|
|||
|
- 0:禁用
|
|||
|
- 默认为 1。
|
|||
|
- 映射到数据库字段 status。
|
|||
|
"""
|
|||
|
|
|||
|
department = fields.ForeignKeyField(
|
|||
|
"models.Department",
|
|||
|
related_name="users",
|
|||
|
null=True,
|
|||
|
description="所属部门",
|
|||
|
source_field="department_id" # 映射到数据库字段 department_id
|
|||
|
)
|
|||
|
"""
|
|||
|
所属部门。
|
|||
|
- 外键关联到 Department 表。
|
|||
|
- 如果为 null,则表示用户未分配部门。
|
|||
|
- 映射到数据库字段 department_id。
|
|||
|
"""
|
|||
|
|
|||
|
roles = fields.ManyToManyField(
|
|||
|
"models.Role",
|
|||
|
related_name="users",
|
|||
|
through="user_role",
|
|||
|
description="用户角色"
|
|||
|
)
|
|||
|
"""
|
|||
|
用户角色。
|
|||
|
- 多对多关系,表示用户拥有的角色。
|
|||
|
- 通过中间表 `user_role` 关联角色表。
|
|||
|
"""
|
|||
|
|
|||
|
class Meta:
|
|||
|
table = "user" # 数据库表名
|
|||
|
table_description = "用户表" # 表描述
|
|||
|
ordering = ["-create_time"] # 默认按创建时间倒序排序
|
|||
|
|
|||
|
|
|||
|
class UserRole(BaseModel):
|
|||
|
"""
|
|||
|
用户角色中间表。
|
|||
|
"""
|
|||
|
|
|||
|
user = fields.ForeignKeyField(
|
|||
|
"models.User",
|
|||
|
related_name="user_roles",
|
|||
|
source_field="user_id" # 映射到数据库字段 user_id
|
|||
|
)
|
|||
|
role = fields.ForeignKeyField(
|
|||
|
"models.Role",
|
|||
|
related_name="user_roles",
|
|||
|
source_field="role_id" # 映射到数据库字段 role_id
|
|||
|
)
|
|||
|
|
|||
|
class Meta:
|
|||
|
table = "user_role" # 数据库表名
|
|||
|
table_description = "用户角色中间表" # 表描述
|
|||
|
unique_together = (("user_id", "role_id"),) # 唯一约束,防止重复分配
|