From 0136386ad0237bb4270ea30238521fb2a5e361a0 Mon Sep 17 00:00:00 2001 From: Sami Date: Fri, 25 Mar 2022 23:08:02 +0500 Subject: [PATCH] Enable CSV export for the 4 main tables Organisations, Persons, Resources, Mountain ranges --- app/admin.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/admin.py b/app/admin.py index 471efd5..e9736cc 100644 --- a/app/admin.py +++ b/app/admin.py @@ -1,10 +1,28 @@ +from re import A +from unicodedata import name from django.contrib import admin from django.utils.html import format_html from .models import * from django.forms import TextInput from django.conf import settings +from django.http import HttpResponse +import csv +def download_csv(modeladmin, request, queryset): + name = queryset[0].__class__.__name__ + response = HttpResponse() + response['Content-Disposition'] = "attachment; filename="+name+"_table.csv" + first_row = [] + for i in queryset[0]._meta.__dict__.get("fields"): + temp = str(i).split('.') + first_row.append(temp[-1]) + writer = csv.writer(response) + writer.writerow(first_row) + for dic in queryset.values(): + temp_list = (list(dic.values())) + writer.writerow(temp_list) + return response class PeopleResourceInline(admin.TabularInline): autocomplete_fields = ['resource'] model = PeopleResource @@ -67,6 +85,8 @@ class PersonAdmin(admin.ModelAdmin): autocomplete_fields = ['organization'] list_per_page = settings.ADMIN_LIST_PER_PAGE ordering = ['full_name'] + actions = [download_csv] + # list_display_links = ['id'] @@ -91,6 +111,10 @@ class ResourcePeopleInline(admin.TabularInline): } + + + + class ResourceAdmin(admin.ModelAdmin): inlines = [ ResourceKeywordInline, @@ -130,6 +154,8 @@ class ResourceAdmin(admin.ModelAdmin): }), ) list_per_page = settings.ADMIN_LIST_PER_PAGE + actions = [download_csv] + class RangeNameTranslationInline(admin.TabularInline): @@ -185,6 +211,7 @@ class RangeAdmin(admin.ModelAdmin): ordering = ['range_name'] list_per_page = settings.ADMIN_LIST_PER_PAGE + actions = [download_csv] class PeopleOrganizationInline(admin.TabularInline): model = Person @@ -225,6 +252,7 @@ class OrganizationAdmin(admin.ModelAdmin): }) ) ordering = ['organisation_english'] + actions = [download_csv] def org_url(self, instance): return format_html('{1}',