在queryset上运行其他过滤器会触发数据库命中

时间:2013-05-27 13:11:58

标签: django

我有一个方法可以从模型中检索一个给定日期的所有记录,并使用结果运行其他过滤。附加过滤是一个循环,每小时检索一次记录。

简化示例(示例中的一些伪编码)

qs = Occasion.filter(start_date__gte='2013-05-27 00:00:00', end_date__lte='2013-05-27 23:59:59')

list(qs)

for start_hour, end_hour in method_that_returns_hour_for_date('2013-05-27 00:00:00'):        
    # start_hour = 2013-05-27 00:00:00
    # end_hour = 2013-05-27 01:00:00 and so on...

    #The query below renders a new query
    sub = qs.filter(start_date__lte=start_hour, end_date__gte=end_hour)

在调试工具栏中,我可以看到循环中的每个小时都会完成一个新的数据库查询。我试图通过对未过滤的查询集以及list()执行len()来触发在循环之前执行的SQL查询,但这不会阻止在循环时执行其他查询。

我可以做些什么来优化它?

0 个答案:

没有答案