6

ユーザーにデータの CSV/XLS エクスポート機能を提供するために、しばらくの間 django-import-export を使用してきましたが、データセットが大きくなると、サーバーのタイムアウトが発生します。

使用できることは理解していますStreamingHttpResponseが、これは独自の CSV ライター関数を記述してデータを出力することによって行われますが、少なくとも最初は、現在のアプローチでできることとは思えません。

django-import-export モデル リソースを使用してファイルを生成しているときに、応答をストリーミングすることは可能ですか?

これは、私が現在実装している種類のコードで、標準のHttpResponse;

class ExportConsolePlacesView(ClientPlacesView, View):
    """
    Export view for all places, either incomplete or complete.
    """
    model = Place
    http_method_names = ['get', ]

    def get(self, request, *args, **kwargs):
        self.object_list = self.get_queryset()
        console_name = self.console.name.replace(' ', '_')

        if kwargs['query'] == u'complete':
            dataset = PlaceResource().export(
                Place.objects.complete_entrants_for_console(self.console)
            )
            filename = '{}_complete_entrants'.format(console_name).lower()

        elif kwargs['query'] == u'incomplete':
            dataset = PlaceResource().export(
                Place.objects.incomplete_entrants_for_console(self.console)
            )
            filename = '{}_incomplete_entrants'.format(console_name).lower()

        export_type = kwargs['format']
        _dataset_methods = {
            'csv': dataset.csv,
            'xls': dataset.xls
        }
        response = HttpResponse(
            _dataset_methods[export_type], content_type=export_type
        )
        response[
            'Content-Disposition'] = 'attachment; filename={fn}.{ext}'.format(
                fn=filename,
                ext=export_type
            )

        return response
4

1 に答える 1

4

の開発者にこれを問い合わせたところdjango-import-export、アプリが使用しているために、動作tablibの仕方が原因で応答をストリーミングできないと彼は考えていますtablib

django-import-export が使用する tablib からエクスポートのストリームを作成することはできないと思います。

https://github.com/django-import-export/django-import-export/issues/206

于 2015-02-09T16:16:39.867 に答える