我从数据库中获取了多个具有预取关系的对象:
datei_logs = DateiLog.objects.filter(user=request.user)
.order_by("-pk")
.prefetch_related('transfer_logs')
transfer_logs
是指:
现在我想得到所有状态为"Good"
的TransferLogs
。但我想如果我这么做:
datei_logs[0].transfer_logs.filter(...)
它再次查询数据库!因为这发生在一个有很多日志条目的网站上,我最后有900个查询!在
我使用:
datei_logs[0].transfer_logs.count()
同样,它也会导致对数据库的大量查询!在
我该怎么做才能“只获取所有信息”,然后只查询一个包含所有信息的对象而不是数据库?在
由于您使用的是django1.7,所以可以使用新的^{} 对象来指定要用于相关查找的查询集。在
然后您可以访问
datei_logs[0].good_logs
并选中len(datei_logs[0].good_logs)
。在如果您对多个状态感兴趣,可以使用多个
Prefetch
对象。但是,如果您无论如何都要获取所有日志,那么最好还是坚持原来的查询,然后在Python中拆分日志,而不是调用filter()
。在相关问题 更多 >
编程相关推荐