【问题标题】:Understanding Django queryset field lookup in了解 Django 中的查询集字段查找
【发布时间】:2016-09-26 10:38:28
【问题描述】:

短版:为什么 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

为什么会这样?

【问题讨论】:

    标签: python django-queryset


    【解决方案1】:

    我怀疑这是因为 SQL 处理 NULL 的方式。查询编译为SELECT COUNT(*) FROM mymodel WHERE NOT (id IN (NULL));

    参见 this question 示例,了解为什么 NOT IN with NULL 总是返回空。

    【讨论】:

    • 好一个。最有可能的情况。不知道connection.queries
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多