0

我正在努力开始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
4

4 回答 4

1

我可以在不更改的情况下解决这个问题的唯一方法mongodb-engine是使用正常的queryset. 所以要得到我使用的计数

count = Model.objects.all().count()

对于我想要的数据,我使用了

values = Model.objects.values('a', 'b')
于 2013-12-05T03:31:00.343 回答
0

尝试这个:

query_list = list(query_set)
len = query_list.indexof(query_list[-1])

该方法与len列表的功能没有任何相似之处。您可能知道len使用循环来计算长度,但上述方法利用散列。

于 2013-12-02T18:46:36.877 回答
0

您的问题是由于 mongodb 聚合函数引起的。 你可以使用`Model.objects.item_frequencies('field') 或者你可以在这里阅读。

于 2013-12-03T12:27:03.910 回答
0

你为什么不试试len(values)。这很好用

于 2013-12-02T14:04:53.153 回答