From 8ed4099a4880d8559a27e67f46f8b11f8e0fe441 Mon Sep 17 00:00:00 2001 From: Sylvain Le Bon <sylvain@startinblox.com> Date: Sat, 25 May 2024 13:10:17 +0200 Subject: [PATCH] feature: csv export in admin --- djangoldp/admin.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/djangoldp/admin.py b/djangoldp/admin.py index 9211d407..a8136c97 100644 --- a/djangoldp/admin.py +++ b/djangoldp/admin.py @@ -1,6 +1,8 @@ +from csv import DictWriter from django.contrib import admin -from guardian.admin import GuardedModelAdmin from django.contrib.auth.admin import UserAdmin +from django.http import HttpResponse +from guardian.admin import GuardedModelAdmin from djangoldp.models import Activity, ScheduledActivity, Follower from djangoldp.activities.services import ActivityQueueService @@ -10,10 +12,21 @@ class DjangoLDPAdmin(GuardedModelAdmin): An admin model representing a federated object. Inherits from GuardedModelAdmin to provide Django-Guardian object-level permissions ''' - pass + actions = ['export_csv'] + + @admin.action(description="Export CSV") + def export_csv(self, request, queryset): + response = HttpResponse(content_type="text/csv") + response['Content-Disposition'] = f'attachment; filename="{self.model.__name__}.csv"' + headers = {field.name:field.verbose_name for field in self.model._meta.fields if field.name in self.list_display} + + writer = DictWriter(response, fieldnames=headers.keys()) + writer.writerow(headers) + writer.writerows(queryset.values(*headers.keys())) + return response -class DjangoLDPUserAdmin(UserAdmin, GuardedModelAdmin): +class DjangoLDPUserAdmin(UserAdmin, DjangoLDPAdmin): '''An extension of UserAdmin providing the functionality of DjangoLDPAdmin''' list_display = ('urlid', 'email', 'first_name', 'last_name', 'date_joined', 'last_login', 'is_staff') -- GitLab