2013-03-12 27 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」(沒有錯誤)。

凱瑟琳的做法就像一個魅力:)