export.py 文件源码

python
阅读 39 收藏 0 点赞 0 评论 0

项目:dsmr-reader 作者: dennissiemensma 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号