Python 内容类型查询按对象值筛选
我使用Django 2.0.0,并具有以下数据库结构: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
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
,但是你可以用另一种方式解决问题。