从Django的raw()查询函数中获取结果数

Gal*_*len 7 python django django-orm

我正在使用原始查询,我无法找到如何获得它返回的结果数.有办法吗?

编辑

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

Jas*_*nko 14

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

results = ModelName.objects.raw("select * from modelnames_modelname")
len(list(results))  #returns length
Run Code Online (Sandbox Code Playgroud)

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

  • 这会强制对查询进行评估吗?如果您只想要计数,这是很昂贵的. (3认同)

Dan*_*man 11

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

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

sum(1 for result in results)
Run Code Online (Sandbox Code Playgroud)