【发布时间】:2014-10-14 17:28:53
【问题描述】:
我正在从我的数据库中获取多个具有预取关系的对象:
datei_logs = DateiLog.objects.filter(user=request.user)
.order_by("-pk")
.prefetch_related('transfer_logs')
transfer_logs指的是这个:
class TransferLog(models.Model):
datei_log = models.ForeignKey("DateiLog", related_name="transfer_logs")
status = models.CharField(
max_length=1,
choices=LOG_STATUS_CHOICES,
default='Good'
)
server_name = models.CharField(max_length=100, blank=True, default="(no server)")
server = models.ForeignKey('Server')
class Meta:
verbose_name_plural = "Transfer-Logs"
def __unicode__(self):
return self.server_name
现在我想获取所有状态为"Good" 的TransferLogs。但我想如果我这样做:
datei_logs[0].transfer_logs.filter(...)
它再次查询数据库!由于这发生在一个有许多日志条目的网站上,我最终得到了 900 个查询!
我用:
datei_logs[0].transfer_logs.count()
同样,它也会导致对数据库的大量查询!
我该怎么做才能“获取所有内容”,然后只查询一个包含所有信息的对象而不是数据库?
【问题讨论】:
标签: python django django-1.7