guzhi/.trae/documents/在不改计算逻辑前提下修复步骤入库(step_order类型调整).md
邹方成 cc352d3184 feat: 重构后端服务并添加新功能
refactor: 优化API路由和响应模型
feat(admin): 添加App用户管理接口
feat(sms): 实现阿里云短信服务集成
feat(email): 添加SMTP邮件发送功能
feat(upload): 支持文件上传接口
feat(rate-limiter): 实现手机号限流器
fix: 修复计算步骤入库问题
docs: 更新API文档和测试计划
chore: 更新依赖和配置
2025-11-19 19:36:03 +08:00

1.7 KiB
Raw Blame History

问题

  • 计算步骤创建时报 Pydantic 校验错误:step_order 期望整型,但代码使用层级小数(如 2.1、2.11)。这不是计算公式问题,而是“类型不匹配”导致步骤未入库。

修复原则

  • 不改变任何计算公式或数值流程,仅调整“步骤顺序”的存储与校验类型,使其能接受层级小数。

具体改动

  1. 模型字段修改(不涉公式):
  • app/models/valuation.pyValuationCalculationStep.step_order: IntField → DecimalField(max_digits=8, decimal_places=3);保留 ordering=["step_order"],确保排序正确。
  1. Schema 修改(不涉公式):
  • ValuationCalculationStepCreate.step_order: int → Decimal,添加前置校验,支持 int/float/str 自动转换为 DecimalValuationCalculationStepOut 同步为 Decimal。
  • 列表与详情端点已使用 model_dump_json()json.loads()Decimal 会被正确序列化为 JSON 数字,无需改动。
  1. 代码调用无需改(不涉公式):
  • 由于 Schema 接受 float 并转换为 Decimal现有调用处传入 2.1/2.11/... 不需改。
  1. 迁移与验证
  • 启动时执行 Aerich 迁移更新列类型(项目已有初始化流程)。
  • 跑脚本观测:calcstep.create 不再报错;calcstep.list 数量 > 0后台“估值计算步骤”返回完整数组。

影响范围与安全性

  • 仅变更“步骤顺序”的字段类型与 Schema 校验,不触及任何计算逻辑或公式。
  • 排序按照 Decimal 正常工作层级表达2.11 < 2.2)保留。

——确认后,我将按以上方案修改模型与 Schema并执行验证保证不改变计算逻辑仅解决类型不匹配问题。