我有一些像这样简单的Django模型:
class Event(models.Model):
# some stuff
class Price(models.Model):
event = models.ForgeinKey(Event)
即。每个Event
都有1个或多个Price
。
我选择了这样的事件:events = Event.objects.filter(…)
,然后循环遍历它们for event in events:
,在循环内我需要访问每个事件的所有Price
个对象(即{ {1}})但是,它为每个事件执行新的SQL查询。我有成千上万的事件,这导致成千上万的查询。有没有什么方法可以一次性为每个事件预填充event.price_set
?
我尝试在QuerySet中添加price_set
,但它不起作用(我仍然可以看到Django调试工具栏中的所有查询)。当然有一些方法可以在原始SQL查询上进行连接,这会在一个查询中引入所有select_related
及其Event
吗?
答案 0 :(得分:2)
看看:https://github.com/lilspikey/django-batch-select/ 只需2个查询(1个用于事件,1个用于价格),它将允许您获得所需的内容
答案 1 :(得分:1)
作为对此问题的其他人的暗示:
Django 1.4(在撰写本文时尚未发布),prefetch_related
作为select_related
的补充,这正是我在这里所要求的。