我可以这样做:
select * from mytable m where m.group_id in (?)
Run Code Online (Sandbox Code Playgroud)
...并传入要扩展到我的参数的列表或参数数组,即:
select * from mytable m where m.group_id in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
具体来说,我使用的是Spring和JdbcTemplate/SimpleJdbcTemplate类.
在例子中.如果我有一个模型人有一个母领域,这是一个外键..以下是给我的:
p = Person.object.get(id=1)
if p.mother_id:
print "I have a mother!"
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们发出了一个查询.我已经欺骗了Django而不是通过使用_id字段而不是mother.id来获取母亲.但如果我要过滤所有没有母亲的人:
Person.objects.filter(mother=None)
Person.objects.filter(mother__id=None)
Person.objects.filter(mother__isnull=True)
Person.objects.filter(mother__id__isnull=True)
Run Code Online (Sandbox Code Playgroud)
所有这些都不必要地加入相关表中.我无法引用_id列,因为它们不是字段..因此以下任一情况都会失败:
Person.objects.filter(mother_id__isnull=True)
Person.objects.filter(mother_id=None)
Run Code Online (Sandbox Code Playgroud)
有没有办法让我构建一个querySet来检查外键列中是否存在值而不会产生连接?
提前致谢.
编辑(已回答): 感谢Bernd,他对Daniel的回答发表了评论,但事实证明,这种解决方法对于没有母亲的返回人员来说非常出色,而且没有发出不必要的联接:
Person.objects.exclude(mother__isnull=False)
Run Code Online (Sandbox Code Playgroud)
编辑(更多细节):
我还应该提一下,我发现当FK关系可以为空时,这种行为实际上似乎只是在它的头部.奇怪,但是真的.