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)
吗?
像:
a = M.objects.filter(f=None)
a.query.__str__()
u'SELECT * FROM "app_m" WHERE "app_m"."f" IS NULL'
这是一个默认的SQL行为,django bug还是我错过了f__in=
的内容?
提前谢谢你!
答案 0 :(得分:5)
a = M.objects.filter(Q(f__isnull=True) | Q(f__in=['1',...]))
答案 1 :(得分:1)
似乎是Django(https://code.djangoproject.com/ticket/13768)中的旧bug。
我刚刚使用Django 1.5进行了一些测试,它仍然存在:当在应用于“__in”的列表中使用时,“无”被忽略(无错误)。
凯瑟琳的做法就像一个魅力:)