0

django-taggitを使用して、todoリストアプリのアイテムにタグを付けています。

各タグと、各タグに関連付けられているアクションの数を一覧表示して、次のように表示しようとしています。

Tag A (1)
Tag B (3)
Tag C (2)

タグAには1つのアイテムがあり、タグBには3つのアイテムがあります。

django-taggitにブールフィールドを追加しました。だから今私はこのようなタグのリストを取得しています:

visible_tags = Tag.objects.filter(visible=True).order_by('name')
hidden_tags = Tag.objects.filter(visible=False).order_by('name')

このようなアイテム(アクション)の数を取得できます:

for tag in visible_tags:
    print tag
    print Action.objects.filter(tags__name__in=[tag]).count()

次に、これらのカウントをvisible_tagsセットとhidden_​​tagsセットにアタッチして、次のようにテンプレートでそれらを反復処理できるようにします。

{% for tag in visible_tags %}
    {{ tag }} ({{ tag.count }})<br>
{% endfor %}

.count値をvisible_tags内およびhidden_​​tags内の各タグに添付するにはどうすればよいですか? 各セットのすべてのタグを反復処理する必要があると思いますか?

4

1 に答える 1

0

アノテーションを使用する:https ://docs.djangoproject.com/en/dev/topics/db/aggregation/

from django.db.models import Count

Tag.objects.annotate(action_count=Count('action'))

(少し調整する必要があるかもしれません。関連する名前を推測していますAction

于 2012-03-09T14:59:49.487 に答える