ETest-Vue-FastAPI/test_job列表查询修复说明.md

100 lines
2.9 KiB
Markdown
Raw Permalink Normal View History

2025-12-19 10:12:59 +08:00
# 作业管理test_job列表查询修复说明
## 问题描述
进入作业管理页面时,调用列表接口报错:
```
'dict' object has no attribute 'model_dump'
```
## 问题原因
1. **DAO层返回类型改变**修改为JOIN查询后`get_test_job_list` 方法返回的是 **dict** 类型而非 **BaseModel对象**
2. **Controller使用了错误的参数**
- `ResponseUtil.success(model_content=xxx)` 期望传入 **BaseModel对象**,会调用 `.model_dump()` 方法
- 但传入的是 **dict**,导致报错
3. **返回dict的key格式错误**
- DAO返回的dict key使用了下划线命名`page_num`, `page_size`
- 但前端期望驼峰命名(`pageNum`, `pageSize`
## 修复内容
### 1. 修正DAO返回的dict key格式
**文件**: `ruoyi-fastapi-backend/module_admin/system/dao/test_job_dao.py`
```python
# 修改前
return {
'rows': processed_rows,
'total': total,
'page_num': query_object.page_num, # ❌ 下划线命名
'page_size': query_object.page_size, # ❌ 下划线命名
'has_next': has_next # ❌ 下划线命名
}
# 修改后
return {
'rows': processed_rows,
'total': total,
'pageNum': query_object.page_num, # ✅ 驼峰命名
'pageSize': query_object.page_size, # ✅ 驼峰命名
'hasNext': has_next # ✅ 驼峰命名
}
```
### 2. 修正Controller的响应参数
**文件**: `ruoyi-fastapi-backend/module_admin/system/controller/test_job_controller.py`
```python
# 修改前
return ResponseUtil.success(model_content=test_job_page_query_result) # ❌ 会调用.model_dump()
# 修改后
return ResponseUtil.success(dict_content=test_job_page_query_result) # ✅ 直接使用dict
```
## ResponseUtil.success 参数说明
- **`model_content`**: 传入 **BaseModel对象**,内部会调用 `.model_dump(by_alias=True)`
- **`dict_content`**: 传入 **dict**,内部直接 `result.update(dict_content)`
## 测试步骤
1. **重启后端服务**
```bash
cd ruoyi-fastapi-backend
python server.py
```
2. **测试列表查询**
- 打开浏览器,进入"作业管理"页面
- 应该能正常显示列表数据
3. **测试完整流程**
- ✅ 列表查询
- ✅ 新增作业
- ✅ 编辑作业
- ✅ 删除作业
- ✅ 导出作业
## 修复时间
2025-11-07
## 经验总结
1. **返回类型一致性**
- 如果DAO返回dictController应使用 `dict_content` 参数
- 如果DAO返回BaseModelController应使用 `model_content` 参数
2. **命名规范统一**
- 前后端交互使用驼峰命名camelCase
- 数据库字段使用下划线命名snake_case
- ORM模型内部使用下划线命名
3. **JOIN查询后的数据处理**
- DAO层应直接返回处理好的dict
- 确保dict的key使用驼峰命名
- Service层直接返回DAO结果不需要额外处理