47

私のhtmlファイルで、使用しているクエリセットのサイズを出力するにはどうすればよいですか(デバッグ目的で)

私はもう試した

{{ len(some_queryset) }}

しかし、それはうまくいきませんでした。フォーマットは何ですか?

4

5 に答える 5

83

試してみてください{{ some_queryset.count }}

{{ some_queryset.__len__ }}これは、レコード自体ではなくレコード数のみを取得するようにバックグラウンドで生成された SQL を最適化するため、len (これは で呼び出すことができます) を使用するよりも優れています。

于 2012-05-22T03:25:35.010 に答える
31

some_queryset.count()または{{some_queryset.count}}あなたのテンプレートで。

使用lenしないでください。効率が大幅に低下します。データベースはその作業を行う必要があります。に関するドキュメントを参照してくださいcount()

ただし、バッファのアドバイスを考慮に入れると、とにかくレコードを反復することを計画している場合はlen、クエリセットを解決し、結果の行をメインメモリに常駐させることを含む which を使用することもできます-これらにアクセスするため、これは無駄になりませんとにかく行。データベース接続のレイテンシーによっては、実際にはより高速になる場合がありますが、常に測定する必要があります。

于 2012-05-22T03:26:40.827 に答える
12

受け入れられた答えは完全に正しいわけではありません。len() (またはテンプレートの長さフィルター) と count() のどちらを使用するかは、ユースケースによって異なります。

行数をカウントするためだけに QuerySet が存在する場合は、count() を使用します。

QuerySet が別の場所 (ループなど) で使用されている場合は、len() または |length を使用します。ここで count() を使用すると、別の SELECT クエリが発行されて行がカウントされますが、len() は単純に QuerySet にキャッシュされた結果の量をカウントします。

ドキュメントから:

QuerySet 内のアイテムの数が必要であり、そこからモデル インスタンスも取得している場合 (たとえば、それを反復処理することによって)、おそらく len(queryset) を使用する方が効率的であり、次のような余分なデータベース クエリは発生しません。 count() でしょう。

prefetch_related() を使用してすでにeager-loadした関連オブジェクトのように見えますが、count() を安全に使用でき、Django は別の SELECT クエリを実行する代わりにキャッシュされたデータを使用するのに十分賢くなります。

于 2018-11-17T11:11:49.680 に答える