ETest-Vue-FastAPI/test_job_bugfix.md

82 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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优化后必须注意的重要事项