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