# 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 ```python # 修改前 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 ```python # 修改前 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优化后必须注意的重要事项!