diff --git a/djangoldp/admin.py b/djangoldp/admin.py index 9211d4074cf8d035f0829c82e34fbfb5bb67e5a7..a8136c97d7af72e521b01a39c930d4923ee9a579 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')