2013-03-12 13 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"(1、2)AND "app_m" "F" INはNULL IS)」をこの(1、2、NULL)を含まない – panchicore

+2

'Q'もインポートすることを忘れないでください:' from django.db.models import Q' – Yoone

1

Django(https://code.djangoproject.com/ticket/13768)に古いバグがあるようです。

私はDjango 1.5でいくつかのテストを行いましたが、まだそこにあります: "__in"(エラーなし)に適用されたリストで使用されると、 'None'は無視されます。これは、このようなクエリになり

キャサリン・アプローチが魅力:)

関連する問題