gpt4 book ai didi

python - 了解 Django 查询集字段查找

转载 作者:行者123 更新时间:2023-12-01 03:40:15 26 4
gpt4 key购买 nike

简短版本:为什么 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 的私钥,我会得到预期的结果:

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

例如参见 this question讨论为什么 NOT IN with NULL 总是返回空。

关于python - 了解 Django 查询集字段查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com