Entry
模型和Reference
具有M2M关系。
class Entry(models.Model):
description = models.TextField(blank=True, null=True)
references = models.ManyToManyField(Reference, blank=True)
class Reference(models.Model):
name = models.CharField(max_length=1000, blank=True, null=True)
title = models.CharField(max_length=1000, blank=True, null=True)
我需要迭代这些条目并从Entry
获取一个字段。另外,对于每个entry
,我需要迭代其references
,并从每个reference
获取数据。
prefetch_related
未缓存所有参考数据。对于每个entry
,当我调用entry.references.all()
时,我再次点击数据库,性能非常糟糕(我有100k条目和500k引用)。
如何在一次数据库调用中获取所有数据?
qs = Entry.objects.prefetch_related('references').all()
for entry in qs:
# do something with entry
for ref in entry.references.all():
# do something with ref
答案 0 :(得分:0)
我错过了ExpiredKeyRemover
有Reference
的外键。当我在Source
中加入Source
模型时,效果从8分钟变为80秒(这是可以接受的)。
prefetch_related