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,空) 别忘了导入Q
:from django.db.models import Q
如果您的列表不包含 None,这将不起作用。【参考方案2】:
这似乎是 Django 中的老错误 (https://code.djangoproject.com/ticket/13768)。
我刚刚用 Django 1.5 做了一些测试,它仍然存在:在应用于 "__in" 的列表中使用时,'None' 会被忽略(没有错误)。
凯瑟琳的方法就像一个魅力:)
【讨论】:
以上是关于Django Queryset __in 列表中没有值的主要内容,如果未能解决你的问题,请参考以下文章