2012-04-17 99 views
0

我可以在不訴諸兩個查詢的情況下獲得以下工作嗎?Django:過濾外鍵值或無

>>> c = Category.objects.all()[0] 
>>> len(Document.objects.filter(category=c)) 
3 
>>> len(Document.objects.filter(category=None)) 
55 
>>> len(Document.objects.filter(category__in=[c, None])) 
3 
+0

預期結果是什麼? – aisbaa 2012-04-17 18:33:33

+1

如果你想要所有類別的計數,'Document.objects.values('category')。annotate(count = Count('category'))。order_by()' – agf 2012-04-17 19:08:08

+0

實際上並不需要計數。這僅僅是爲了說明的目的。 – 2012-04-17 19:22:59

回答

2

使用Q object

from django.db.models import Q 
len(Document.objects.filter(Q(category=c) | Q(category=None))) 
+0

'queryset.count()' – agf 2012-04-17 19:08:01

+0

@agf實際上,如果您打算評估queryset,它並不會有效。 – freakish 2012-04-17 22:11:18