我想让count
使用ValuesQuerySet
。根据Django文档
values = Model.objects.values()
将返回ValuesQuerySet
,它是QuerySet
Returns a ValuesQuerySet — a QuerySet subclass that returns dictionaries when used as an
iterable, rather than model-instance objects
这意味着QuerySet
的所有方法也应该适用于ValuesQuerySet
。
然而,当我尝试这样做时,我得到一个例外
values = Model.objects.values()
然后在我的代码中的某个地方
v_size = size_calc(values)
def size_calc(objects)
return objects.count()
File "/home/talha/ws/events.py", line
246, in size_calc
return objects.count()
File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 336, in count
return self.query.get_count(using=self.db)
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 401, in
get_count
number = obj.get_aggregation(using=using)[None]
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 367, in
get_aggregation
result = query.get_compiler(using).execute_sql(SINGLE)
File "/usr/lib/python2.7/site-packages/django/db/models/sql/query.py", line 213, in
get_compiler
return connection.ops.compiler(self.compiler)(self, connection, using)
File "/usr/lib/python2.7/site-packages/django/db/backends/__init__.py", line 582, in
compiler
return getattr(self._cache, compiler_name)
AttributeError: 'module' object has no attribute 'SQLAggregateCompiler'
count
可以在普通QuerySets
上无缝运行..这可能是后端驱动程序的问题吗?
更新:评估len
后我无法使用Queryset
,因为数据很大,需要在评估之前进行切片。
我正在使用带有mongodb后端的Django。相关包是
django==1.3.0
django-mongodb-engine==0.4.0
djangotoolbox==0.9.2
答案 0 :(得分:1)
我可以在不mongodb-engine
进行更改的情况下解决此问题的唯一方法是使用正常queryset
获取计数。所以为了得到我用过的计数
count = Model.objects.all().count()
对于我想要的数据,我使用了
values = Model.objects.values('a', 'b')
答案 1 :(得分:0)
为什么不试试len(values)
。这很好用
答案 2 :(得分:0)
试试这个:
query_list = list(query_set)
len = query_list.indexof(query_list[-1])
此方法与list的len
函数完全相似。您可能知道len
使用循环来计算长度,但上面的方法利用散列。
答案 3 :(得分:0)
您的问题是由于mongodb聚合功能造成的。 你可以使用`Model.objects.item_frequencies(' field') 或you can read here.