[英]Understanding Django queryset field lookup in
簡短版本:為什么Model.objects.exclude(..__ in = [None])排除每個對象?
我遇到了我不了解的django字段查找的有趣行為。 假設我有給定模型的21個對象:
>>> Model.objects.count()
21
如果我直接排除給定的私鑰或使用字段查找排除在外in
則會得到預期的行為:
>>> Model.objects.exclude(pk=1).count()
20
>>> Model.objects.exclude(pk__in=[1]).count()
20
如果排除值None
的私鑰, None
得到預期的結果:
>>> Model.objects.exclude(pk=None).count()
21
但是,如果我做同樣的與in
現場查找我得不到任何回報:
>>> Model.objects.exclude(pk__in=[None]).count()
0
為什么會這樣呢?
我懷疑這是因為SQL處理NULL的方式。 該查詢從我的模型編譯為SELECT COUNT(*) FROM mymodel WHERE NOT (id IN (NULL));
。
例如,請參閱此問題 ,以討論為什么NOT IN with NULL總是返回空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.