docs: plan django-admin 中文化 (T-602 层1-3 / T-603 层4)
- 06-tasks.md 新增 T-602(LANGUAGE_CODE=zh-hans + app/模型 verbose_name)与 T-603(字段级 verbose_name) - progress.md 追加两条决策记录;均为显示层、无 DB schema 变更 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -80,6 +80,8 @@
|
||||
| ID | 任务 | 依赖 | 验收要点 | 状态 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| T-601 | 可用别名发现(portal 别名页 + `GET /api/v1/models`) | T-202, T-301, T-503 | 让调用方能自助发现「能填哪些 `model` 能力别名」。① 新增 `GET /api/v1/models`(**API Key 鉴权,继承 `ExternalApiView`,只复用认证失败限流;不要占用生成接口的 `GenerateRateThrottle` 额度**),仅返回 `ModelAlias.is_active=True` 且 `ai_model.is_active=True` 的可调用别名;② 响应每项只含对外安全字段:`alias`、`operation_type`、`capabilities`、`requires_image`(按 `api_type`/provider 规则推导,如 `images_edits=true`)、`pricing_status`、`prices[{resolution, points_cost}]`,缺 `PricingRule` 时标「暂未定价」而非报错;③ **实现时不得调用 `AiModel.to_resolved_model()` 或任何会解密 provider key 的路径**,列表接口不依赖 `AI_KEY_ENCRYPTION_KEY`,也不读取/输出 `api_key_encrypted`;④ **不暴露具体 SKU/模型名/url/key/provider 原始配置**,测试必须断言响应不含 `ai_model.model`、`ai_model.url`、`api_key`、`api_key_encrypted`、`extra_body` 等内部字段;⑤ portal 加只读「可用模型」页(session 鉴权),同字段、人类可读、单价以点数展示,并在导航中加入入口;⑥ 含测试:API Key 成功返回结构、缺/无效 Key 拒绝、Web session 不能调用外部 API、portal 未登录跳转、页面不泄露 SKU/URL/Key、缺定价别名显示暂未定价。**标注**:未来接 `account_alias_permission`(见 Backlog)后,本清单改为「只列该用户被授权的别名」,接口与页面均按 `user` 过滤 | DONE |
|
||||
| T-602 | django-admin 中文化(第 1-3 层) | - | 让运营后台表名/分组/框架文字显示中文,**仅显示层、不改业务逻辑与 DB 结构**。**第 1 层**:`config/settings.py` 设 `LANGUAGE_CODE='zh-hans'` + `USE_I18N=True`,使 Django 自带 admin 界面与内置 `auth`(用户/组/权限)中文化(无迁移)。**第 2 层**:各 app `AppConfig.verbose_name` 设中文分组名(`users`/`billing`/`ai`/`api`/`portal`),无迁移。**第 3 层**:各模型 `Meta.verbose_name`/`verbose_name_plural` 设中文表名(`User`/`UserWallet`/`ApiKey`/`PointsLedger`/`CallRecord`/`PricingRule`/`ExchangeRate`/`RechargeOrder`/`AiModel`/`ModelAlias`/`AiConfigAuditLog`)。**不含第 4 层字段级 `verbose_name`(字段列名保持英文,见 T-603)**。第 3 层会产出 `AlterModelOptions` 等**无 DB 变更**迁移;验收:`makemigrations`(仅 options 变更)→ `migrate` → `check` 0 issues → `test` 全绿 → `/admin/` 目视中文化,并在 `../progress.md` 留证据 | TODO |
|
||||
| T-603 | django-admin 中文化(第 4 层·字段级) | T-602 | 给各模型**字段**加中文 `verbose_name`,使 admin 列表/编辑页的字段标签显示中文,在 T-602(1-3 层)之上做。范围覆盖 `users`/`billing`/`ai`(及 portal 相关)模型的业务字段,例如 `points_balance`→点数余额、`key_prefix`→Key 前缀、`points_delta`→点数变动、`balance_after`→变动后余额、`amount_money`→金额、`exchange_rate`→汇率、`points_granted`→到账点数、`api_type`/`capabilities`/`is_active`/`created_at` 等;`admin.py` 里自定义显示方法(`@admin.display(description=...)`)同步中文。**仅显示层**:`verbose_name` 只改展示,**不改字段名、不改代码引用、英文字段名保持不变**;产出的是 `AlterField`(metadata-only,**无 DB schema 变更**)迁移。验收:`makemigrations`(仅 AlterField,无 schema 变更)→ `migrate` → `check` 0 issues → `test` 全绿 → `/admin/` 字段标签目视中文,并在 `../progress.md` 留证据 | TODO |
|
||||
|
||||
## 里程碑
|
||||
|
||||
|
||||
+20
@@ -1029,3 +1029,23 @@
|
||||
- 小点(不用改):`prices` 按分辨率字符串排序,`512` 排在 `4K` 之后,纯展示层顺序,无功能影响。
|
||||
- 保留:本轮完整套件未单次全绿(远程 MySQL 间歇超时),T-601 相关测试本身通过,非断言失败。
|
||||
- 结论:达标,无 P1/P2,不需要修补任务。
|
||||
|
||||
## 2026-07-04 决策:django-admin 中文化(T-602 立项,先文档)
|
||||
|
||||
- 背景:运营反馈 admin 后台表名/字段名是英文,希望显示中文。按「需求先改文档再改代码」规矩,先立任务。
|
||||
- 范围:本次只做**第 1-3 层(显示层,不动业务逻辑与 DB 结构)**:
|
||||
- 第 1 层 `LANGUAGE_CODE='zh-hans'` + `USE_I18N=True`:Django 自带 admin 与内置 auth(用户/组/权限)界面中文化(无迁移,性价比最高)。
|
||||
- 第 2 层 各 app `AppConfig.verbose_name`:中文分组名(无迁移)。
|
||||
- 第 3 层 各模型 `Meta.verbose_name`/`verbose_name_plural`:中文表名(产出 `AlterModelOptions` **无 DB 变更**迁移)。
|
||||
- 明确**不含第 4 层**字段级 `verbose_name`(字段列名暂保持英文),如需另立任务。
|
||||
- 验收:`makemigrations`(仅 options)→ `migrate` → `check`/`test` 全绿 → `/admin/` 目视中文化,留证据。
|
||||
- 决策依据:第 1 层一行配置即可中文化 Django 自身 + auth 约 60-70%;自建模型的表名靠第 2/3 层 verbose_name;字段级(第 4 层)体力大、单独评估。任务见 `06-tasks.md` T-602。
|
||||
- 下一步:按 T-602 实现第 1-3 层。
|
||||
|
||||
## 2026-07-04 决策补充:admin 中文化第 4 层立为 T-603
|
||||
|
||||
- 承接上条:应要求把「第 4 层·字段级 `verbose_name`」也纳入计划,立为独立任务 T-603(依赖 T-602,在 1-3 层之上做)。
|
||||
- 范围:各模型业务字段加中文 `verbose_name`(如 `points_balance`→点数余额、`amount_money`→金额、`points_granted`→到账点数等),admin 自定义显示方法同步中文。
|
||||
- 约束不变:**仅显示层**,`verbose_name` 只改展示、不改字段名与代码引用;产出 `AlterField`(metadata-only,无 DB schema 变更)迁移。
|
||||
- 拆两个任务的原因:第 4 层字段多、机械体力大,独立成 T-603 便于单独实现与复核;T-602(1-3 层)可先落地看效果。
|
||||
- 下一步:T-602 先行,T-603 随后。
|
||||
|
||||
Reference in New Issue
Block a user