2

django アプリで最もコメントの多い 10 の投稿を取得しようとしていますが、適切な方法が考えられないため、取得できません。

私は現在、django コメント フレームワークを使用しており、これをaggregate または annotateで行う可能性を見てきましたが、その方法を理解することはできます。

事は次のようになります:

  • すべての投稿を取得する
  • 投稿ごとのコメント数を計算します (そのための comment_count メソッドがあります)
  • コメント数の多い投稿から順に投稿を並べ替えます
  • 最初の 10 を取得します (たとえば)

これを行うための「簡単な」または「pythonic」の方法はありますか? コメント フレームワークはテンプレート タグを介してのみアクセス可能であり、コードから直接アクセスできないため、少し迷っています (変更したくない場合)。

どんな助けでも大歓迎です

4

2 に答える 2

2

Annotate は、DB クエリを削減し、基本的にワンライナーであるため、推奨される方法になります。あなたの理論的なループは機能しますが、あなたの comment_count メソッドは、特定の投稿のコメントのクエリに依存していると思います。

posts_by_score = Comment.objects.filter(is_public=True).values('object_pk').annotate(
    score=Count('id')).order_by('-score')
post_ids = [int(obj['object_pk']) for obj in posts_by_score]
top_posts = Post.objects.in_bulk(post_ids)

このコードは、Django-Blog-Zinnia (所属なし)から改作された恥知らずなものです。

于 2012-07-19T14:56:17.893 に答える