属性がNoneまたは空の文字列に設定されているモデルのインスタンスをすべて検索しようとしています。私は、ORMの__inクエリについて何か不足していると思います。私はIntegerFieldとでこれを行うと、Noneまたは空の文字列を使用しない場合"Q"と "__in"のDjango ORMクエリの結果が一致しません
TextBlock.objects.filter(content='').count()
>185
TextBlock.objects.filter(content=None).count()
>235
TextBlock.objects.filter(content__in=['', None]).count()
>185
TextBlock.objects.filter(Q(content='')|Q(content=None)).count()
>420
TextBlock.objects.filter(content__in=[None, '']).count()
>185
は、私が取得:
TextBlock.objects.filter(order=1).count()
> 575046
TextBlock.objects.filter(order=2).count()
> 11946
TextBlock.objects.filter(order__in=[1,2]).count()
> 586992
これは私が期待するものです。私はTextBlock.objects.filter(content__in=['', None]).count()
に420の結果を返すと間違っていましたか?もしそうなら、なぜですか?
Qクエリーは私が望むことをしますので、私はそれに行き着きますが、なぜ3番目のクエリーが私が望んだことをしなかったのか不思議です。
ありがとうございます!
EDIT:それは違いますが、コンテンツフィールドはmodels.TextFieldであり、コンテンツは、あなたが比較を使用しないでくださいNoneの場合、注文フィールドがチェックのためにmodels.IntegerField