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

100 lines
2.9 KiB
Markdown
Raw Permalink 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列表查询修复说明
## 问题描述
进入作业管理页面时,调用列表接口报错:
```
'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结果不需要额外处理