2012-04-17 5 views
0

2つのクエリに頼らずに以下を実行できますか?Django:ForeignKeyを値またはなしでフィルタリングします

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

+1

すべてのカテゴリのカウントをしたい場合は、 'Document.objects.values( 'category')。annotate(count = Count( 'category'))order_by()' – agf

+0

実際にカウントしたくありませんでした。それは説明のためだけのものでした。 –

答えて

2

Q objectを使用してください。

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

'queryset.count()' – agf

+0

@agfとにかくクエリーセットを評価しようとしているのなら、これは実際には有効ではありません。 – freakish

関連する問題