9
に注釈、カウントと個別を使用すると、ここに私のデータベースクエリです:ジャンゴ:クエリセット
results = Attachments.objects.filter(currency='current').annotate(num_attachments=Count('article_id')).order_by("num_attachments").distinct('article_id')
次のようにクエリが故障(私はそれを理解):
- まずフィルタは、現在の添付ファイルでありますそれらは現在のものです。
- 次に、特定の 'article_id'を持つ添付ファイルの数を数えます。
- 次に、各添付ファイルにarticle_idが共通する添付ファイルの番号を付ける。
- 次に、添付ファイルの数に基づいてランク付けします。
- 次に、distinctを使ってリストを構文解析して、各article_id値に対して1つのAttachmentオブジェクトがあるようにします。
私はこれをPostgreSQLで実行していますので、Django docsによれば、フィールドに基づいてdistinct()を実行しても問題ありません。
あり、私は、クエリを実行し、エラーがありませんが、私は繰り返す、あるいは、次のエラーがDjangoのデバッグによってスローされた結果を印刷しようとすると:
NotImplementedError at /function/
annotate() + distinct(fields) not implemented.
対話プロンプトからより詳細なトレースバックがされます:
File "<console>", line 1, in <module>
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/query.py", line 118, in _result_iter
self._fill_cache()
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/query.py", line 875, in _fill_cache
self._result_cache.append(self._iter.next())
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/query.py", line 291, in iterator
for row in compiler.results_iter():
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 763, in results_iter
for rows in self.execute_sql(MULTI):
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 808, in execute_sql
sql, params = self.as_sql()
File "/Users/Pat/.virtualenvs/envsp/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 107, in as_sql
"annotate() + distinct(fields) not implemented.")
NotImplementedError: annotate() + distinct(fields) not implemented.
誰でもここで何が起こっているのか分かりますか?
はかなりまっすぐ進むようです。 'NotImplementedError'はDjangoの例外です。コードでは、この時点で 'annotate'と' distinct'(フィールドと)を組み合わせることができないことを知らせています。つまり、今は動作しません。彼らは将来どのような問題が起こっても問題なく動くかもしれませんが、今のところあなたは不運です。あなたはいつでも '生の'に頼り、あなたが望むものを何でもすることができます。 –
上記のコード例では、ドット "。"がありません。 order_byとdistinctフィールドの間。 – Mikael
@Chris同じことを達成するための代替クエリ(生のSQLに加えて)に関するアイデアはありますか? – Pat