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

您可能会得到比预期更多的计数。这是因为链式.filter引入了额外的内部连接,非常类似于问题链式 QuerySet 过滤器是否等同于使用 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 为您生成了什么。

于 2012-04-15T09:15:42.767 回答