| 5c11565b | 获取视频生成任务列表失败: 'VideoGenerationTask' object has no attribute 'comple...
🚨 错误信息
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解决方案
代码报错分析报告文件:
函数:
行号:第2007行
具体代码: 首先查看模型定义文件:
查看迁移文件确认字段名:
使用 IDE 的代码提示功能
- 配置 Python LSP 服务器(如 Pyright、Pylance)
- 确保模型定义文件被正确索引,IDE 能够提供属性自动补全添加类型注解和文档字符串
数据库迁移检查:使用
属性验证:在访问模型属性前使用
单元测试:编写测试用例验证模型属性和 API 端点的兼容性
1. 错误翻译
python
原文:'VideoGenerationTask' object has no attribute 'completed_at'
译文:'VideoGenerationTask' 对象没有 'completed_at' 属性
2. 原因分析
根本原因:代码尝试访问 VideoGenerationTask 对象的一个不存在属性 completed_at。
具体位置:
D:\program\DMXapi\app\api\v1\video.pyget_video_generation_taskstask.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. ️ 预防措施
最佳实践建议:
- 配置 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') 进行检查---
⚠️ 提醒:此错误表明模型定义与代码使用存在不一致,建议同时检查数据库迁移历史和模型定义,确保字段命名在整个项目中保持一致。