如何在循环中强制查询集评估?

时间:2014-01-13 16:21:30

标签: python django evaluation django-queryset

非常简单的任务:一次生成30个xlsx文件(每月一个),并将其作为zip存档下载。 Xlsx文件具有相同的结构,只有差异是数据。

我认为这很容易,例如:

for date in dates:
    report_data = ReportModel.objects.filter(date_id = date)
    xlsx = generate_xlsx_file(report_data)
    add_to_zip_archive(xlsx)

当然,这不是一个真正的代码,只是为了表达一些想法。 这种方法在Django中不起作用。我得到空文件(不是0kB,但是里面没有数据的有效Excel文件)。

当我这样做时:

report_data = ReportModel.objects.filter(date_id = date1)
xlsx = generate_xlsx_file(report_data)
add_to_zip_archive(xlsx)

report_data = ReportModel.objects.filter(date_id = date2)
xlsx = generate_xlsx_file(report_data)
add_to_zip_archive(xlsx)

report_data = ReportModel.objects.filter(date_id = date3)
xlsx = generate_xlsx_file(report_data)
add_to_zip_archive(xlsx)

report_data = ReportModel.objects.filter(date_id = date4)
xlsx = generate_xlsx_file(report_data)
add_to_zip_archive(xlsx)

它有效。我有30个文件充满了数据。

是的,我读过这个:https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated我不知道出了什么问题。 列表:

report_data = list(ReportModel.objects.filter(date_id = date))

没有帮助, report_data每次使用FOR循环时它都是空的。

所以,我的代码中必须写30次相同的内容?有一些变通方法,隐藏功能?如果没有,它看起来真的是一个很大的失败。

0 个答案:

没有答案