如何获取 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>)
我有三个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>)