Become a sponsor

本章概要
代码生成器使用过程中常见问题的原因分析和解决方案。
原因:生成器会校验目标目录不存在,避免覆盖已有模块。
解决方式:
# 1. 删除已有模块目录
rm -rf src/modules/example
# 2. 删除已生成的端点文件
rm src/api/v1/endpoints/example.py
# 3. 从 router.py 中移除对应的导入和注册语句
# 删除这两行:
# from api.v1.endpoints.example import router as example_router
# v1.include_router(example_router, prefix="/example", tags=["案例"])
# 4. 删除数据库中对应的菜单记录
# DELETE FROM fastapi_menu WHERE path = '/tool/example';
# 5. 重新生成
python generator.py fastapi_example排查步骤:
fastapi_menu 表中是否有 path = '/tool/example' 的记录component 字段应为 tool/example/index完整清理流程:
# 1. 删除后端模块
rm -rf src/modules/example
# 2. 删除端点
rm src/api/v1/endpoints/example.py
# 3. 清理 router.py 中的导入和注册
# 4. 删除前端文件
rm -rf ui/src/views/tool/example
rm ui/src/api/tool/example.ts
# 5. 删除数据库菜单
# DELETE FROM fastapi_menu WHERE path = '/tool/example';
# 6. 重新生成
python generator.py fastapi_exampleWeb API 批量生成最多支持 50 个表(MAX_BATCH_SIZE = 50)。CLI 无限制,但建议逐表生成,便于排查问题。
当表中存在 parent_id 或 pid 字段时,自动切换为树状模板(ui2/),生成树形结构的增删改查页面。
树状列表与普通分页列表的区别:
| 维度 | 普通列表(ui/) | 树状列表(ui2/) |
|---|---|---|
| 触发条件 | 无 parent_id/pid | 有 parent_id/pid |
| 模板数量 | 5 个组件 + 1 个 API | 3 个组件 + 1 个 API |
| 数据加载 | 分页请求 | 全量加载 + 前端 buildTree |
| 展开/折叠 | 无 | 支持 |
| 父子关系 | 无 | 自动识别 |
原因:未在项目根目录执行命令。
解决:确保在项目根目录(包含 src/ 和 generator.py 的目录)执行:
cd /data/apps/djangoadmin
python generator.py fastapi_example可能原因:
解决:
--dry-run 检查解析结果python generator.py fastapi_example --dry-run --output config.json--config 重新生成修改 src/modules/generator/templates/ 下的模板文件。模板使用 Jinja2 语法,详见 6.6 自定义模板。
修改模板后重新生成即可生效,不影响已有模块。
可能原因:
解决:
数据库限制
代码生成器通过查询 MySQL 的 information_schema 获取表结构信息,仅支持 MySQL 数据库。service.py 中的 _query_tables、_query_table_detail、_query_table_columns 等函数使用了 MySQL 特有的 SQL 语法(如 TABLE_SCHEMA = (SELECT DATABASE())),在其他数据库中可能无法正常执行。
代码生成器通过 information_schema 查询表元数据,支持以下数据库:
| 数据库 | 支持程度 |
|---|---|
| MySQL | 完全支持(主要开发和测试环境) |
| PostgreSQL | 支持(information_schema 兼容) |
| SQL Server | 支持(information_schema 兼容) |
| SQLite | 部分支持(information_schema 有限) |
| Oracle | 部分支持(需适配) |
症状:生成时报错 jinja2.exceptions.TemplateSyntaxError。
排查步骤:
.tpl 文件检查语法{% if %} 缺少 {% endif %}f.nmae 应为 f.name)大部分问题可通过以下流程解决:
--dry-run 预览配置