You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将MongoDB的Cursor值返回至调用函数并解决报错

问题解决:MongoDB Cursor导致的AttributeError错误

错误原因

报错栈显示Django的clickjacking中间件尝试调用response.get()方法时失败,说明当前被当作响应对象的是MongoDB的Cursor,而Cursor没有get()方法。这通常是因为视图函数误将Cursor作为响应返回,或者在数据传递过程中Cursor被错误地当成了响应对象处理。

解决方案

1. 将Cursor转换为列表返回

MongoDB的collection.find()返回的Cursor是惰性迭代对象,不能直接在Django的视图流程中传递(尤其是不能当作响应)。需要将其转换为普通列表,这样可以在调用函数中正常使用,也不会触发响应处理错误。

修改getData函数:

def getData(value, somedate):
    collection = db[constantsCollection.NameData]
    query = {"$and": [{"value" : value}, {"datetime" : {"$regex" : somedate}}]}
    data = collection.find(query)
    return list(data)  # 转换为列表后返回

2. 检查视图返回逻辑

确保所有视图函数的返回值都是Django的响应对象(比如render()返回的HttpResponse),不要误将Cursor或数据库查询结果直接返回。你的check函数当前返回的是render(request, 'backtest.html'),这是正确的,但要排查是否有其他视图函数存在返回Cursor的情况。

3. 大数据量优化(可选)

如果Cursor包含10000条数据,转换为列表会占用较多内存。此时可以考虑使用分页查询,避免一次性加载所有数据:

# 示例:分页查询前100条数据
def getData(value, somedate, page=1, page_size=100):
    collection = db[constantsCollection.NameData]
    query = {"$and": [{"value" : value}, {"datetime" : {"$regex" : somedate}}]}
    data = collection.find(query).skip((page-1)*page_size).limit(page_size)
    return list(data)

内容的提问来源于stack exchange,提问作者Harshal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:02:40