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

2.9 KiB
Raw Blame History

作业管理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

# 修改前
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)

测试步骤

  1. 重启后端服务

    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结果不需要额外处理