Django Queryset __in 列表中没有值

Posted

技术标签:

【中文标题】Django Queryset __in 列表中没有值【英文标题】:Django Queryset __in with None value in list 【发布时间】:2013-02-28 05:41:45 【问题描述】:
a = M.objects.filter(f__in=[None, 1])
a.query.__str__()
u'SELECT * FROM "app_m" WHERE "app_m"."f" IN (None, 1)'

你不认为那会是IN (NULL, 1) 吗?

喜欢:

a = M.objects.filter(f=None)
a.query.__str__()
u'SELECT * FROM "app_m" WHERE "app_m"."f" IS NULL'

这是默认的 SQL 行为、django 错误还是我缺少 f__in= 的某些内容?

提前谢谢你!

【问题讨论】:

【参考方案1】:
a = M.objects.filter(Q(f__isnull=True) | Q(f__in=['1',...])) 

【讨论】:

这会进行如下查询: WHERE ("app_m"."f" IN (1, 2) AND "app_m"."f" IS NULL)' 这不包括 (1, 2,空) 别忘了导入Qfrom django.db.models import Q 如果您的列表不包含 None,这将不起作用。【参考方案2】:

这似乎是 Django 中的老错误 (https://code.djangoproject.com/ticket/13768)。

我刚刚用 Django 1.5 做了一些测试,它仍然存在:在应用于 "__in" 的列表中使用时,'None' 会被忽略(没有错误)。

凯瑟琳的方法就像一个魅力:)

【讨论】:

以上是关于Django Queryset __in 列表中没有值的主要内容,如果未能解决你的问题,请参考以下文章

Django QuerySet 使用给定的排序列表过滤

在 Django 1.11 中将 QuerySet 传递给 Celery 任务

从 Django Queryset 获取值列表的最有效方法

我怎样才能加入django?

django queryset合并问题

Django Queryset 不同视图的相同模板