diff --git a/apps/common/renders/csv.py b/apps/common/renders/csv.py index cec857ddb..3352c73a0 100644 --- a/apps/common/renders/csv.py +++ b/apps/common/renders/csv.py @@ -2,6 +2,7 @@ # import unicodecsv +from datetime import datetime from six import BytesIO from rest_framework.renderers import BaseRenderer @@ -40,6 +41,16 @@ class JMSCSVRender(BaseRenderer): row = [item.get(key) for key in header] yield row + def set_response_disposition(self, serializer, context): + response = context.get('response') + if response and hasattr(serializer, 'Meta') and \ + hasattr(serializer.Meta, "model"): + model_name = serializer.Meta.model.__name__.lower() + now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + filename = "{}_{}.csv".format(model_name, now) + disposition = 'attachment; filename="{}"'.format(filename) + response['Content-Disposition'] = disposition + def render(self, data, media_type=None, renderer_context=None): renderer_context = renderer_context or {} encoding = renderer_context.get('encoding', 'utf-8') @@ -52,6 +63,7 @@ class JMSCSVRender(BaseRenderer): try: serializer = view.get_serializer() + self.set_response_disposition(serializer, renderer_context) except Exception as e: logger.debug(e, exc_info=True) value = 'The resource not support export!'.encode('utf-8')