1

「表示」としてフラグを付けたすべてのタグの名前をクエリしています。

visible_tags = Tag.objects.filter(visible=True,taggit_taggeditem_items__content_type=ContentType.objects.get_for_model(Action)).order_by('name')

このタグに関連付けられているアクションの数を示す「action_count」というフィールドを追加したいと思います。

visible_tags = Tag.objects.filter(visible=True,taggit_taggeditem_items__content_type=ContentType.objects.get_for_model(Action)).order_by('name').annotate(action_count=Count('action'))

これは、現在多くのアクションが関連付けられているだけでなく、このタグに関連付けられている不完全なアクションの数を知りたい場合を除いて機能します。

私は次のことを試しました:

visible_tags = Tag.objects.filter(visible=True,taggit_taggeditem_items__content_type=ContentType.objects.get_for_model(Action)).order_by('name').filter(action__complete=False).annotate(action_count=Count('action'))

しかし、これは私が必要としていることを完全には実行しません。 不完全なアクションの数に注釈を付けるにはどうすればよいですか?

4

1 に答える 1

1

予想よりも多くのカウントが得られる可能性があります。これは、追加の内部結合を導入するチェーンが、Django ORM を使用して単一のフィルターで複数のフィールドを定義するのと同等のチェーン QuerySet フィルターを使用.filterしているかという質問に非常に似ているためです。 したがって、2 番目のフィルターを最初のフィルターに入れます。

visible_tags = Tag.objects.filter(visible=True, taggit_taggeditem_items__content_type=ContentType.objects.get_for_model(Action), 
action__complete=False # Here
).order_by('name').annotate(action_count=Count('action'))

さらに、print queryset.querySQL Django が生成するものを知ること。

于 2012-04-15T09:15:42.767 に答える