2013-03-12 36 views
5
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)Django Queryset __in列表中没有任何值

喜欢:

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

这是一个默认的SQL行为,Django的错误或我失踪f__in=的东西吗?

谢谢你提前!

回答

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

这使得这样的查询:WHERE(。 “app_m”, “F” IN(1,2)和 “app_m” “F” 是NULL)”这不包括(1,2,NULL) – panchicore 2013-03-12 21:35:25

+2

不要忘记导入'Q':'from django.db.models import Q' – Yoone 2015-05-11 23:39:59

1

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

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

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