私はRankingモデルとUserRankingモデルという2つのモデルを持っています。アプリは、アイテムのリストを取得し、それらをランク付けする人々に集中しています(「2008年のベストムービー」など)。ランク付けモデルは、集計ランク付けされた全体的なリストです。これは、ユーザーがそのリストに対して作成するすべての異なるUserRankingsから計算されます。だから、各ランキングには、UserRankingsの束があり、リストのランク付けされたバージョンを提出して意見を出したユーザーごとに1つだけです。 UserRankingモデルには、Rankingモデルを指す「ランキング」という名前のForeignKeyフィールドがあります。非常に混乱... Djangoで 'annotate'を使用している問題
とにかく、私は人気のランキングを集めようとしています。私の最初のステップは、コード行を使用して、それらに関連する最もUserRankingsでランキングを得ることです:
popular = Ranking.objects.all().annotate(num_user_rankings=Count('userranking')).order_by('num_user_rankings')[:50]
をしかし、Djangoは私にNameErrorを与え、言う:「グローバル名 『カウント』が定義されていません」。 注釈(Django開発版でのみ利用可能です)については不平を言っていないので、Django開発は正しく機能していますか? 'Count'はDjangoのドキュメントにannotateのargとして使用できるいくつかのAggregate関数の1つとして明確に記述されています。これはまったく意味がありません。
実際、私はそれをテストしたところ、パラメタなしで注釈を使ってページを表示することができましたが、エラーは出ませんでした(明らかに私はorder_byも削除しました)。だから、注釈は確実に機能します!
答えは簡単ではないと私は信じられない。私は何か愚かなことをしていることを知っていましたが、そんなにばかげていません!ありがとう、素晴らしい一日=) –