Created
January 27, 2018 19:59
-
-
Save bencleary/e67ab7a1ecadaee6132b927a1bb144cd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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