Source code for shuup.admin.utils.mass_action

# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2021, Shuup Commerce Inc. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
import unicodecsv as csv
from django.db.models import Q
from django.http import HttpResponse
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _

from shuup.admin.modules.settings.view_settings import ViewSettings
from shuup.admin.utils.picotable import PicotableFileMassAction


[docs]class BaseExportCSVMassAction(PicotableFileMassAction): label = _("Export as CSV file") model = None filename = None view_class = None
[docs] def get_queryset(self, request, view, ids): query = Q() if ids != "all": query = Q(pk__in=ids) return view.get_queryset().filter(query)
[docs] def process(self, request, ids): view_instance = self.view_class() view_instance.request = request view_settings = ViewSettings(self.model, self.view_class.default_columns, view_instance) queryset = self.get_queryset(request, view_instance, ids) response = HttpResponse(content_type="text/csv") response["Content-Disposition"] = f'attachment; filename="{self.filename}"' writer = csv.writer(response, delimiter=";", encoding="utf-8") writer.writerow([col.title for col in view_settings.columns]) for item in queryset: row = [] for dr in view_settings.columns: if dr.get_display_value(view_settings.view_context, item): row.append(strip_tags(dr.get_display_value(view_settings.view_context, item))) else: row.append(None) writer.writerow(row) return response