5

私はobject_list一般的なビューを使用して、一連の記事をすばやく一覧表示しています。各条項にはコメントが添付されています。このクエリでは、コメントの数をCount()に、次に注釈した数値をorder_by()にします。注釈付きのDjangoクエリから非アクティブなコメントをフィルタ/除外する方法はありますか?

'queryset': Article.objects.annotate(comment_count=Count('comments')).order_by('-comment_count'), 

コメントはdjango.contrib.commentsフレームワークの一部であり、一般的な関係を介してモデルに取り付けられています。記事モデルに明示的な逆引き参照を追加しました:

class Article(models.Models): 
    ... 
    comments = generic.GenericRelation(Comment, content_type_field='content_type', object_id_field='object_pk') 

問題は、これは「非アクティブ」のコメントです。 is_public=Falseまたはis_removed=Trueのもの。非アクティブなコメントを数えないようにするにはどうすればよいですか?

答えて

2

documentation for aggregationsは、この方法を説明しています。

Article.objects.annotate(comment_count=Count('comments')).filter(
    comment__is_public=True, comment__is_removed=False 
).order_by('-comment_count') 
+0

は、彼らが削除/パブリックコメントを持っているか否かに基づいて、そのフィルタの記事ではないだろう:あなたはannotate句にそれを置くことを確認すること、filter句を使用する必要がありますか? – Jiaaro

+0

これはうまくいったようですが、私はジムが何が起こっていないかを確認するために調査するつもりです。 – Soviut

+0

私が気づいた副作用の1つは、コメントがある記事のみが返され、コメントのない記事は除外されるということです。 – Soviut

関連する問題