Mysql Django条件计数
我正在查询标记为“可见”的所有标记的名称: 我想添加一个名为“action_count”的字段,它告诉我有多少个操作与此标记关联:Mysql Django条件计数,mysql,django,annotations,Mysql,Django,Annotations,我正在查询标记为“可见”的所有标记的名称: 我想添加一个名为“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').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'))
但这并不是我所需要的如何对未完成操作的计数进行注释?您可能会得到比预期更多的计数。这是因为chained
.filter
引入了额外的内部联接,与问题非常相似
因此,将第二个过滤器放在第一个过滤器中:
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'))
此外,
打印queryset.query
以了解SQL Django为您生成的内容。您可能会得到比预期更多的计数。这是因为chained.filter
引入了额外的内部联接,与问题非常相似
因此,将第二个过滤器放在第一个过滤器中:
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'))
此外,
打印queryset.query
以了解SQL Django为您生成的内容。看起来应该可以。它给了你什么?它与你的期望有什么不同?看起来它应该会起作用。它给了你什么?它与你的期望有什么不同?