def form_valid(self, form):
start_date = form.cleaned_data['start_date']
start_date = timezone.localtime(timezone.make_aware(timezone.datetime(
start_date.year, start_date.month, start_date.day
)))
end_date = form.cleaned_data['end_date']
end_date = timezone.localtime(timezone.make_aware(timezone.datetime(
end_date.year, end_date.month, end_date.day
)))
data_type = form.cleaned_data['data_type']
if data_type == ExportAsCsvForm.DATA_TYPE_DAY:
source_data = DayStatistics.objects.filter(
day__gte=start_date.date(), day__lte=end_date.date()
).order_by('day')
export_fields = [
'day', 'electricity1', 'electricity2', 'electricity1_returned',
'electricity2_returned', 'gas', 'electricity1_cost', 'electricity2_cost',
'gas_cost', 'total_cost'
]
else: # if data_type == ExportAsCsvForm.DATA_TYPE_HOUR:
source_data = HourStatistics.objects.filter(
hour_start__gte=start_date, hour_start__lte=end_date
).order_by('hour_start')
export_fields = [
'hour_start', 'electricity1', 'electricity2', 'electricity1_returned',
'electricity2_returned', 'gas'
]
# Direct copy from Django docs.
class Echo(object):
""" An object that implements just the write method of the file-like interface. """
def write(self, value):
""" Write the value by returning it, instead of storing in a buffer. """
return value
pseudo_buffer = Echo()
writer = csv.writer(pseudo_buffer)
response = StreamingHttpResponse(
(
self._generate_csv_row(writer, source_data, export_fields)
),
content_type='text/csv'
)
attachment_name = 'dsmrreader-data-export---{}__{}__{}.csv'.format(
data_type, start_date.date(), end_date.date()
)
response['Content-Disposition'] = 'attachment; filename="{}"'.format(attachment_name)
return response
评论列表
文章目录