2012-04-15 55 views
1

我詢問,我已經標記爲「可見」的所有標籤的名稱:Django的條件計數

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')) 

但是這並不完全做我需要做的。 如何註釋不完整的操作的計數?

+2

看起來應該可以工作。它給你什麼,它與你的期望有什麼不同? – chandsie 2012-04-15 02:42:15

回答

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的爲您生成。