2013-03-12 11 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)' 

Nie uważasz, że będzie to IN (NULL, 1)?Zestaw kwerend Django __in z wartością Brak na liście

lubię:

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

Czy jest to zachowanie domyślne SQL Django bug czy ja czegoś brakuje z f__in=?

z góry dziękuję!

Odpowiedz

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

To sprawia, że ​​zapytanie tak: jeśli (.. "App_m" "f" w punkcie (1, 2) oraz "app_m" "f" jest null)”to nie zawiera (1, 2, NULL) – panchicore

+2

Nie zapomnij również zaimportować 'Q':' from django.db.models import Q' – Yoone

1

Wygląda na to, że jest starym błędem w Django (https://code.djangoproject.com/ticket/13768).

Właśnie zrobiłem kilka testów z Django 1.5 i nadal tam jest: "Brak" zostanie zignorowany, gdy zostanie użyty na liście zastosowanej do "__in" (bez błędów).

podejście Katarzyna działa jak czar :)

Powiązane problemy