2.2 KiB
2.2 KiB
test_job模块Bug修复说明
问题描述
在使用优化后的test_job模块时,添加或编辑作业报错:
dict' object has no attribute 'model_dump'
问题原因
在添加/编辑作业时,Pydantic模型包含了4个新添加的只读字段:
tester_namereviewer_namesecond_tester_namethird_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.pyruoyi-fastapi-backend/module_admin/system/service/test_job_service.py
数据流说明
查询时(GET请求)
- DAO层执行JOIN查询
- 返回包含ID和名称的完整数据
- 前端直接显示名称
新增/编辑时(POST/PUT请求)
- 前端提交数据(只包含ID字段)
- Pydantic验证并创建模型对象
- 调用 model_dump() 时排除name字段
- 只将ID字段写入数据库
测试验证
✅ 新增作业 - 选择人员后保存,检查是否成功
✅ 编辑作业 - 修改人员后保存,检查是否成功
✅ 列表显示 - 确认显示的是人名而非ID
✅ 导出功能 - 确认导出的是人名
注意事项
如果将来添加更多JOIN查询字段,记得:
- 在VO模型中添加字段(带
Optional) - 在DAO的JOIN查询中添加
- 在 model_dump 的 exclude 中排除该字段
这是使用JOIN优化后必须注意的重要事项!