【发布时间】:2011-03-03 12:15:00
【问题描述】:
我正在使用原始查询,但无法找出如何获取它返回的结果数量。有什么办法吗?
编辑
.count() 不起作用。它返回:'RawQuerySet' 对象没有属性'count'
【问题讨论】:
-
不幸的是:“wontfix”:code.djangoproject.com/ticket/32058
标签: python django django-orm
我正在使用原始查询,但无法找出如何获取它返回的结果数量。有什么办法吗?
编辑
.count() 不起作用。它返回:'RawQuerySet' 对象没有属性'count'
【问题讨论】:
标签: python django django-orm
我猜你说的是raw() queryset 方法。这会返回一个查询集,就像任何其他查询集一样。因此,您当然可以调用.count(),就像处理任何其他 ORM 查询一样。
编辑 显示当您不检查时会发生什么。正如您所注意到的,.raw() 返回一个 RawQuerySet,它没有计数方法——它也不支持len()。获取长度的唯一方法是遍历查询集并计算它们:
sum(1 for result in results)
【讨论】:
您也可以先将其转换为列表以获取长度,如下所示:
results = ModelName.objects.raw("select * from modelnames_modelname")
len(list(results)) #returns length
如果您还想在模板中获得 RawQuerySet 中条目的长度甚至是否存在,则需要这样做。只需像上面一样预先计算长度,并将其作为参数传递给模板。
【讨论】:
Count Works on RawQuerySet
ModelName.objects.raw("select 1 作为 id , COUNT(*) from modelnames_modelname")【讨论】: