如何获取 Django ORM 中另一个模型中不存在的查询列表?

How to get query list that does not exist in another model in Django ORM?

我有三个table:

表1

class Table1(models.Model):
    field1 = model.CharField(...)
    field2 = model.CharField(...)

表2

class Table2(models.Model):
    field1 = model.CharField(...)
    field2 = model.CharField(...)

表3

class Table3(models.Model):
    table1 = model.ForeignKey(Table1)
    table2 = model.ForeignKey(Table2)

我想获取 Table1 中不存在的所有 Table3 数据,其中还包括 Table2.

例如: 在 Table1 我有三行: 第 1 行、第 2 行、第 3 行

Table2 我有一行: r1

Table3 我有一行: table1 = 行 1 table2 = r1

当我在 Table3Table2s r1 中搜索时,我想从 Table1 中获取 rows2 和 rows3

我可以使用此代码获得预期结果:

table3 = Table3.objects.filter(table2=Table2.objects.get(id=1)).values_list('table1')
queryset = Table1.objects.filter(~Q(id__in=table3 ))

我的问题现在有没有更好的方法来做到这一点?

谢谢

您可以使用 .exclude(…) [Django-doc]:

Table1.objects.exclude(<b>table3__table2_id=1</b>)