つまり、ランキングモデルとUserRankingモデルの2つのモデルがあります。このアプリは、アイテムのリストを取得してランク付けする人々を中心にしています(例:「2008年のベスト映画」)。ランキングモデルは、ランク付けされたリスト全体の集計であり、ユーザーがそのリスト用に作成したさまざまなUserRankingから計算されます。したがって、ランキングごとに、さまざまなUserRankingが多数あり、ランク付けされたバージョンのリストを送信して意見を述べたユーザーごとに1つだけです。UserRankingモデルには、Rankingモデルを指す「ranking」という名前のForeignKeyフィールドがあります。
とにかく、人気ランキングを集めようとしています。私の最初のステップは、次のコード行を使用して、ほとんどのUserRankingが関連付けられているランキングを取得することです。
popular = Ranking.objects.all().annotate(num_user_rankings=Count('userranking')).order_by('num_user_rankings')[:50]
しかし、Djangoは私にNameErrorを与え、「グローバル名'カウント'は定義されていません」と言います。注釈(Django開発バージョンでのみ利用可能)について文句を言わないので、Django開発が正しく機能していることを意味しますか?'Count'は、注釈のargとして使用できるいくつかの集計関数の1つとして、Djangoのドキュメントで明確に説明されています。これはまったく意味がありません。
実際、私はそれをテストしたばかりで、パラメーターなしで注釈を使用してページを表示することができ、エラーは発生しませんでした(明らかにorder_byも削除しました)。したがって、注釈は確実に機能します!