| 5c11565b | 获取视频生成任务列表失败: 'VideoGenerationTask' object has no attribute 'comple...

2026年01月10日 16:23 processing

错误信息

2026-01-10 16:21:09 | INFO | 5c11565b | 开始 GET /api/v1/videos/tasks 来自 127.0.0.1 2026-01-10 16:21:09 | ERROR | 5c11565b | 获取视频生成任务列表失败: 'VideoGenerationTask' object has no attribute 'completed_at' Traceback (most recent call last): File "D:\program\DMXapi\app\api\v1\video.py", line 2007, in get_video_generation_tasks completed_at=task.completed_at, ^^^^^^^^^^^^^^^^^ AttributeError: 'VideoGenerationTask' object has no attribute 'completed_at'

AI 解决方案

代码报错分析报告

1. 错误翻译

原文:'VideoGenerationTask' object has no attribute 'completed_at'
译文:'VideoGenerationTask' 对象没有 'completed_at' 属性

2. 原因分析

根本原因:代码尝试访问 VideoGenerationTask 对象的一个不存在属性 completed_at

具体位置

  • 文件:D:\program\DMXapi\app\api\v1\video.py

  • 函数:get_video_generation_tasks

  • 行号:第2007行

  • 具体代码:task.completed_at
  • 上下文分析:程序在处理 /api/v1/videos/tasks 请求时,需要获取视频生成任务列表,但在访问任务对象的完成时间属性时,发现该属性在模型定义中不存在或命名不一致。

    3. 解决方案

    方案一:检查模型定义,使用正确属性名

    # 首先检查 VideoGenerationTask 模型的实际定义
    # 可能的正确属性名示例:
    completed_at=task.completed_at,  # 当前错误属性
    # 改为以下可能的正确属性:
    completed_at=task.completed_time,    # 可能1
    completed_at=task.finished_at,       # 可能2
    completed_at=task.end_time,          # 可能3
    completed_at=task.finish_time,       # 可能4
    

    方案二:添加属性访问检查

    # 修改第2007行代码
    # 原始代码:
    completed_at=task.completed_at,
    
    # 修改为安全访问:
    completed_at=getattr(task, 'completed_at', None) or 
                  getattr(task, 'completed_time', None) or
                  getattr(task, 'finished_at', None) or
                  getattr(task, 'end_time', None) or
                  None
    

    方案三:查看数据库迁移文件,确认实际字段名

    • 首先查看模型定义文件:

    • # 找到 VideoGenerationTask 模型定义
      grep -r "class VideoGenerationTask" D:\program\DMXapi\
      

      • 查看迁移文件确认字段名:

      • # 查看最近的迁移文件
        find D:\program\DMXapi -name "*.py" -type f -exec grep -l "completed" {} \;
        

        4. ️ 预防措施

        最佳实践建议:

        • 使用 IDE 的代码提示功能

        • - 配置 Python LSP 服务器(如 Pyright、Pylance)
          - 确保模型定义文件被正确索引,IDE 能够提供属性自动补全

          • 添加类型注解和文档字符串

          •    class VideoGenerationTask(models.Model):
                   """视频生成任务模型"""
                   
                   # 明确标注所有字段
                   created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
                   finished_at = models.DateTimeField(null=True, blank=True, verbose_name="完成时间")  # 注意字段名
                   
                   def __str__(self):
                       return f"VideoTask {self.id}"
               

            ️ 推荐工具:

            • 数据库迁移检查:使用 python manage.py makemigrations --dry-run 检查模型变更

            • 属性验证:在访问模型属性前使用 hasattr(task, 'attribute_name') 进行检查

            • 单元测试:编写测试用例验证模型属性和 API 端点的兼容性

            ⚠️ 提醒:此错误表明模型定义与代码使用存在不一致,建议同时检查数据库迁移历史和模型定义,确保字段命名在整个项目中保持一致。