Django Queryset __in列表中没有值

时间:2013-03-12 15:50:42

标签: sql django django-models django-orm

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 bug还是我错过了f__in=的内容?

提前谢谢你!

2 个答案:

答案 0 :(得分:5)

a = M.objects.filter(Q(f__isnull=True) | Q(f__in=['1',...])) 

答案 1 :(得分:1)

似乎是Django(https://code.djangoproject.com/ticket/13768)中的旧bug。

我刚刚使用Django 1.5进行了一些测试,它仍然存在:当在应用于“__in”的列表中使用时,“无”被忽略(无错误)。

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