Skip to content

Instantly share code, notes, and snippets.

@bencleary
Created January 27, 2018 19:59
Show Gist options
  • Save bencleary/e67ab7a1ecadaee6132b927a1bb144cd to your computer and use it in GitHub Desktop.
Save bencleary/e67ab7a1ecadaee6132b927a1bb144cd to your computer and use it in GitHub Desktop.
def generate_csv(self, request, columns: list=None):
"""
View to handle logic to determine if mixin properties are set and perform actions on said properties,
kept in seperate method to keep "method" methods cleaner
:param request:
:return:
"""
if self.custom_queryset:
if columns is None:
csv_props = Generate(request, cls=None).csv_file(headers=self.custom_headers, data=self.custom_queryset)
return self.prep(csv_props[1], csv_props[0])
else:
self.custom_headers = [c for c in self.custom_headers if c in columns]
csv_props = Generate(request, cls=None).csv_file_custom_columns(headers=self.custom_headers,
data=self.custom_queryset,
columns=columns)
return self.prep(csv_props[1], csv_props[0])
elif self.custom_queryset is None:
if columns is None:
headers = [h.column for h in self.model._meta.get_fields()]
query = self.model.objects.all()
csv_props = Generate(request, cls=None).csv_file(headers=headers, data=query)
return self.prep(csv_props[1], csv_props[0])
else:
headers = [h.column for h in self.model._meta.get_fields() if h.column in columns]
query = self.model.objects.all()
csv_props = Generate(request, cls=None).csv_file_custom_columns(headers=headers,
data=query,
columns=columns)
return self.prep(csv_props[1], csv_props[0])
else:
return HttpResponse("Error", status=400)
class GenerateCSVMixin(GenerateCSV, View):
def get_query_params(selfs, request):
"""
Will handle getting query parameters for selecting which columns a user wants to export
:param request:
:return:
"""
if request.GET.get("columns") is not None:
selected_columns = request.GET["columns"].split(",")
return list(selected_columns)
else:
return None
def get(self, request, *args, **kwargs):
columns = self.get_query_params(request)
return self.generate_csv(request, columns)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment