Djangoのimport exportで日本語csvのエンコードを変更

クライアントさんから、Djangoで作っているシステムのデータをExcelで開きたいとの要望をいただきました。

Djangoのcsvエクスポートを探していると、Django import exportというモジュールを見つけました。

しかし、普通にcsvをエクスポートすると日本語が文字化けしてしまいます。

ドキュメントにもあったto_encodingを指定してみましたが、効果がありませんでした。

最終的に、以下のようなコードで解決しました。

class SomeAdmin(ExportMixin, admin.ModelAdmin):
    resource_class = CustomResource
    to_encoding = "cp932"

    def get_export_data(self, file_format, queryset, *args, **kwargs):
        """
        Returns file_format representation for given queryset.
        """
        request = kwargs.pop("request")
        resource_class = self.get_export_resource_class()
        data = resource_class(**self.get_export_resource_kwargs(request)).export(queryset, *args, **kwargs)
        export_data = file_format.export_data(data)
        return export_data.encode(self.to_encoding)

ExportMixinにあるget_export_data関数をオーバーライドして、最後のexport_dataをエンコードしただけですね。


ソースを読んでみると、to_encodingは定義されているのに使用されていない感じがします。

この記事とかによると、to_encodingを使うソースはどこかしらのタイミングで削除されてしまったみたいですね。

pull reqを出すか悩みましたが、機能自体が途中で削除されたっぽいので、もう少し様子をみようと思います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする