2013-03-12 3 views
5

glaubst du nicht, dass das IN (NULL, 1) wäre?Django Queryset __in mit Keinem Wert in der Liste

mag:

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

Ist das ein Standard-SQL-Verhalten, django Fehler oder ich etwas mit f__in= bin fehlt?

danke im voraus!

Antwort

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

dies macht eine Abfrage wie folgt: WHERE (.. "App_m" "f" IN (1, 2) und "app_m" "f" IS NULL):‘Diese enthält nicht (1, 2, NULL) – panchicore

+2

Vergessen Sie nicht, auch 'Q' zu importieren:' from django.db.models import Q' – Yoone

1

Es scheint zu sein und alte Bug in Django (https://code.djangoproject.com/ticket/13768).

Ich habe gerade einige Tests mit Django 1.5 gemacht und es ist immer noch da: 'None' wird ignoriert, wenn es in einer Liste verwendet wird, die auf "__in" angewendet wird (keine Fehler).

Catherine Ansatz wirkt wie ein Zauber :)