82 lines
2.2 KiB
Markdown
82 lines
2.2 KiB
Markdown
|
|
# 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优化后必须注意的重要事项!
|
|||
|
|
|