我想弄清楚如何在django中编写一个'not in'样式查询.例如,我想的查询结构看起来像这样.
select table1.*
from table1
where table1.id not in
(
select table2.key_to_table1
from table2
where table2.id = some_parm
)
Run Code Online (Sandbox Code Playgroud)
假设模型名为table1和table2,django语法会是什么样子?
Har*_*rph 154
Not
exclude函数的工作方式与flat = True您要求的运算符类似.该属性table2告诉value_list查询返回IDs一个级别列表.所以...最后,您table1将从table2 获取一个列表,您将使用该列表来定义条件Not,该函数将被exclude函数拒绝.
Ser*_*ini 10
使用这些型号:
class table1(models.Model):
field1 = models.CharField(max_length=10) # a dummy field
class table2(models.Model):
key_to_table1 = models.ForeignKey(table1)
Run Code Online (Sandbox Code Playgroud)
你应该得到你想要的东西:
table1.objects.exclude(table2=some_param)
Run Code Online (Sandbox Code Playgroud)
table1.objects.extra(where=["table1.id NOT IN (SELECT table2.key_to_table1 FROM table2 WHERE table2.id = some_parm)"])
Run Code Online (Sandbox Code Playgroud)