簡體   English   中英

了解中的Django queryset字段查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM