ETest-Vue-FastAPI/test_job_bugfix.md

2.2 KiB
Raw Permalink Blame History

test_job模块Bug修复说明

问题描述

在使用优化后的test_job模块时添加或编辑作业报错

dict' object has no attribute 'model_dump'

问题原因

在添加/编辑作业时Pydantic模型包含了4个新添加的只读字段

  • tester_name
  • reviewer_name
  • second_tester_name
  • third_tester_name

这些字段是通过JOIN查询获得的不存在于数据库表中

当调用 model_dump() 将模型转换为dict准备插入数据库时这些字段也被包含进去了导致SQL插入失败。

解决方案

model_dump() 时显式排除这些只读字段:

1. 修改 add_test_job_dao

# 修改前
db_test_job = TestJob(**test_job.model_dump(exclude={}))

# 修改后
db_test_job = TestJob(**test_job.model_dump(
    exclude={'tester_name', 'reviewer_name', 'second_tester_name', 'third_tester_name'},
    exclude_unset=True
))

2. 修改 edit_test_job_services

# 修改前
edit_test_job = page_object.model_dump(exclude_unset=True, exclude={})

# 修改后
edit_test_job = page_object.model_dump(
    exclude_unset=True, 
    exclude={'tester_name', 'reviewer_name', 'second_tester_name', 'third_tester_name'}
)

修改的文件

  • ruoyi-fastapi-backend/module_admin/system/dao/test_job_dao.py
  • ruoyi-fastapi-backend/module_admin/system/service/test_job_service.py

数据流说明

查询时GET请求

  1. DAO层执行JOIN查询
  2. 返回包含ID和名称的完整数据
  3. 前端直接显示名称

新增/编辑时POST/PUT请求

  1. 前端提交数据只包含ID字段
  2. Pydantic验证并创建模型对象
  3. 调用 model_dump() 时排除name字段
  4. 只将ID字段写入数据库

测试验证

新增作业 - 选择人员后保存,检查是否成功 编辑作业 - 修改人员后保存,检查是否成功
列表显示 - 确认显示的是人名而非ID 导出功能 - 确认导出的是人名

注意事项

如果将来添加更多JOIN查询字段记得

  1. 在VO模型中添加字段Optional
  2. 在DAO的JOIN查询中添加
  3. 在 model_dump 的 exclude 中排除该字段

这是使用JOIN优化后必须注意的重要事项