100 lines
2.9 KiB
Markdown
100 lines
2.9 KiB
Markdown
# 作业管理(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返回dict,Controller应使用 `dict_content` 参数
|
||
- 如果DAO返回BaseModel,Controller应使用 `model_content` 参数
|
||
|
||
2. **命名规范统一**:
|
||
- 前后端交互使用驼峰命名(camelCase)
|
||
- 数据库字段使用下划线命名(snake_case)
|
||
- ORM模型内部使用下划线命名
|
||
|
||
3. **JOIN查询后的数据处理**:
|
||
- DAO层应直接返回处理好的dict
|
||
- 确保dict的key使用驼峰命名
|
||
- Service层直接返回DAO结果,不需要额外处理
|
||
|