Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Queryset __in with None value in list

a = M.objects.filter(f__in=[None, 1])
a.query.__str__()
u'SELECT * FROM "app_m" WHERE "app_m"."f" IN (None, 1)'

dont you think that would be IN (NULL, 1) ?

like:

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

Is this a default SQL behavior, django bug or I am missing something with f__in= ?

thank you in advance!

like image 740
panchicore Avatar asked Mar 12 '13 15:03

panchicore


2 Answers

a = M.objects.filter(Q(f__isnull=True) | Q(f__in=['1',...])) 
like image 58
catherine Avatar answered Oct 21 '22 20:10

catherine


It seems to be and old bug in Django (https://code.djangoproject.com/ticket/13768).

I just made few tests with Django 1.5 and it still is there: 'None' gets ignored when used in a list applied to "__in" (no errors).

Catherine approach works like a charm :)

like image 1
swK Avatar answered Oct 21 '22 19:10

swK