10

我正在使用原始查询,我无法找出如何获取它返回的结果数量。有办法吗?

编辑

.count() 不起作用。它返回:'RawQuerySet' 对象没有属性 'count'

4

3 回答 3

16

您也可以先将其转换为列表以获取长度,如下所示:

results = ModelName.objects.raw("select * from modelnames_modelname")
len(list(results))  #returns length

如果您还想在模板中获得 RawQuerySet 中条目的长度甚至存在,则需要这样做。只需像上面一样预先计算长度,并将其作为参数传递给模板。

于 2011-07-27T14:57:40.660 回答
12

我想你在谈论raw()queryset 方法。这会返回一个查询集,就像任何其他查询集一样。所以当然你可以调用.count()它,就像你调用任何其他 ORM 查询一样。

编辑显示当您不检查时会发生什么。正如您所注意到的,.raw()它返回一个 RawQuerySet ,它没有 count 方法 - 而且它也不支持len(). 获得长度的唯一方法是遍历查询集并计算它们:

sum(1 for result in results)
于 2010-06-14T12:46:36.527 回答
2

计数在 RawQuerySet 上的工作

 

ModelName.objects.raw("select 1 作为 id , COUNT(*) from modelnames_modelname")

于 2017-02-03T08:46:48.550 回答