mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-20 20:39:55 +00:00
## 背景 本次修复包含前后端两部分: 1. 前端SQL模板添加软删除字段(新功能) 2. 后端代码模板排除软删除字段(预防性修复) ## 修复内容 ### 前端模板:添加软删除字段(新功能) **文件**: createTableVisualPresets.ts 之前前端SQL模板缺少软删除字段,导致生成的表不完整。 - **mixinMysql()**: 添加软删除字段 - is_deleted: tinyint(1) NOT NULL - 标记是否已删除 - deleted_time: datetime NULL - 记录删除时间 - deleted_id: int NULL - 记录删除人ID - **mixinPostgres()**: 添加软删除字段 - is_deleted: boolean NOT NULL - 标记是否已删除 - deleted_time: timestamp without time zone NULL - 记录删除时间 - deleted_id: integer NULL - 记录删除人ID ### 后端模板:排除软删除字段(预防性修复) **文件**: model.py.j2, schema.py.j2 虽然之前前端模板没有软删除字段,但为了配合前端修复,需要确保后端模板正确排除这些字段。 - **model.py.j2**: 在排除列表中添加 is_deleted, deleted_time, deleted_id - 原排除列表: ['id', 'uuid', 'status', 'description', 'created_time', 'updated_time', 'created_id', 'updated_id'] - 新排除列表: 添加 'is_deleted', 'deleted_time', 'deleted_id' - 原因: 这些字段由 ModelMixin 和 UserMixin 提供,不应在生成的模型中重复定义 - **schema.py.j2**: 在排除列表中添加 is_deleted, deleted_time, deleted_id - 原排除列表: ['uuid', 'created_time', 'updated_time', 'created_id', 'updated_id'] - 新排除列表: 添加 'is_deleted', 'deleted_time', 'deleted_id' - 原因: 软删除字段由系统自动管理,不应出现在新增/更新Schema中 ## 技术说明 ### 软删除机制 软删除(逻辑删除)是一种不物理删除数据的删除方式: - **is_deleted**: 标记记录是否已删除(false=未删除, true=已删除) - **deleted_time**: 记录删除时间,用于审计和数据恢复 - **deleted_id**: 记录删除操作人ID,外键关联sys_user表 ### 字段继承关系 生成的模型继承自两个基类: - **ModelMixin**: 提供 id, uuid, status, description, created_time, updated_time, is_deleted, deleted_time - **UserMixin**: 提供 created_id, updated_id, deleted_id 及对应的关联关系 代码生成器应排除这些字段,避免重复定义。 ## 修复效果 ### 修复前 - 前端模板生成的表缺少软删除字段 ❌ - 后端模板排除列表不完整(虽然暂时没问题,因为前端也没生成这些字段) ### 修复后 - 前端模板生成的表包含完整的软删除字段 ✅ - 后端模板正确排除软删除字段,避免重复定义 ✅ - 前后端配合,生成的代码正确继承基类的软删除功能 ✅ ## 影响范围 - ✅ 使用\"单表·MySQL\"或\"单表·PostgreSQL\"模板创建的表自动包含软删除字段 - ✅ 生成的model.py只包含业务字段,不会重复定义基础字段 - ✅ 所有新生成的模型自动支持软删除功能 - ✅ 与现有系统的软删除机制保持一致"