我正在查询我标记为“可见”的所有标签的名称:
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'))
但这并不是我需要做的事情。 如何注释不完整的操作计数?
答案 0 :(得分:1)
您可能会获得比预期更多的计数。这是因为链式.filter
引入了额外的内连接,非常类似于问题Are chained QuerySet filters equivalent to defining multiple fields in a single filter with the Django ORM?
因此将第二个过滤器放在第一个过滤器中:
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.query
知道SQL Django为您生成的内容。