| 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. 错误翻译

python
原文:'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. 解决方案

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

    python

    首先检查 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

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

    python

    修改第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

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

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

  • bash

    找到 VideoGenerationTask 模型定义


    grep -r "class VideoGenerationTask" D:\program\DMXapi\

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

  • bash

    查看最近的迁移文件


    find D:\program\DMXapi -name "*.py" -type f -exec grep -l "completed" {} \;

    4. ️ 预防措施

    最佳实践建议:

  • 使用 IDE 的代码提示功能

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

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

  • python
    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 端点的兼容性
  • ---

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