ETest-Vue-FastAPI/test_job_bugfix.md

82 lines
2.2 KiB
Markdown
Raw Normal View History

2025-12-19 10:12:59 +08:00
# 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优化后必须注意的重要事项