Python 内容类型查询按对象值筛选

Python 内容类型查询按对象值筛选,python,django,generics,django-orm,Python,Django,Generics,Django Orm,我使用Django 2.0.0,并具有以下数据库结构: class Project(models.Model): name = models.CharField(_(u'Name'), max_length=32) class Domain(models.Model): project = models.ForeignKey('projects.Project', on_delete=models.CASCADE) tool_result = GenericRelati

我使用Django 2.0.0,并具有以下数据库结构:

class Project(models.Model):
    name = models.CharField(_(u'Name'), max_length=32)

class Domain(models.Model):
    project = models.ForeignKey('projects.Project', on_delete=models.CASCADE)
    tool_result = GenericRelation('projects.ToolResult')

class ToolResult(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
我想获得基于内容类型对象项目的所有ToolResults过滤器

ToolResult.objects.filter(content_type=ContentType.objects.get_for_model(Domain), content_object__project__in=[1, 2])

我试过这样做,但不起作用。我有大约500k域记录和3kk工具结果记录。这使得不可能迭代对象。如何有效地执行此操作?

我们可以首先查询项目所在的
域的列表
[1,2]

domain_ids = (Domain.objects.filter(project__in=[1, 2])
                            .values_list('id', flat=True))
现在在第二遍中,我们可以对
内容类型
对象id
进行过滤:

ToolResult.objects.filter(content_type=ContentType.objects.get_for_model(Domain),
                          object_id__in=domain_ids)

什么不起作用?你不能像那样遵循
GenericForeignKey
,但是你可以用另一种方式解决问题。