Django在/不在查询中

Tur*_*rbo 93 sql django

我想弄清楚如何在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函数拒绝.

  • 为djangoness +1.然而,id_in应该是id__in. (4认同)
  • 我也遇到过列表构造函数[table2 ...] - > list(table2 ...)的问题. (2认同)
  • 更正:table1.objects.exclude(id__in = table2.objects.filter(your_condition).values_list('id',flat = True)) (2认同)

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)


ibz*_*ibz 5

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)