0

私はに取り組もうとしてcountValuesQuerySetます。Djangoのドキュメントによると

values = Model.objects.values()

ValuesQuerySetのサブクラスであるa を返します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 に答える