过滤ManyToMany关系以查找具有多个匹配关系的项目

时间:2016-05-23 22:45:27

标签: python django django-orm

我有描述表和列的模型,其中列可以在多个表中,反之亦然:

class Table(models.Model):
   column = models.ManyToManyField("Column")

class Column(models.Model):
    name = models.CharField(max_length=256)

给定一组列,我试图找到包含这些列的所有表:

from django.db.models import Q
for col in columns:
    queries &= Q(columns__pk=col.pk)
table = Table.objects.filter(queries)

当我通过每次迭代打印时,第一次迭代很好,但每次后续迭代都是空的。

    for col in columns:
        queries &= Q(columns__pk=col.pk)
        print Table.objects.filter(queries)

    table = Table.objects.filter(queries)

如何正确运行此查询?

1 个答案:

答案 0 :(得分:0)

所以我提出的解决方案是:

tables = Table.objects.all()
for col in columns:
    tables = tables.filter(columns__pk=col.pk)

# tables is now ready to use.

我认为这很有效。