I am trying to get count
to work on a ValuesQuerySet
. According to Django documentation
values = Model.objects.values()
will return a ValuesQuerySet
which is a subclass of QuerySet
Returns a ValuesQuerySet — a QuerySet subclass that returns dictionaries when used as an
iterable, rather than model-instance objects
This would mean that all methods of QuerySet
should work on ValuesQuerySet
also.
However, when I try to do it I get an exception
values = Model.objects.values()
and then somewhere in my code
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
works seamlessly on normal QuerySets
.. Could this be an issue with the backend drivers?
Update: I cannot use len
after evaluating the Queryset
as the data is huge and needs to be sliced before evaluation.
I am using Django with a mongodb backend. Related packages are
django==1.3.0
django-mongodb-engine==0.4.0
djangotoolbox==0.9.2
The only way I could get past this issue without making changes in the
mongodb-engine
was to get the count using the normalqueryset
. So to get the count I usedand for the data I that wanted, I used