Skip to content

Commit 48eaa9e

Browse files
authored
Merge pull request #19 from mastertech/improvement/admin-export
Adicionar ação no admin para exportar linhas selecionadas para csv
2 parents 7f85c30 + bc24461 commit 48eaa9e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

nisia_cadastro/admin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.contrib import admin
22
from django.utils.translation import gettext_lazy as _
33
from .models import Registered
4+
from .export import ExportCsvMixin
45

56

67
class HasWrittenStoryListFilter(admin.SimpleListFilter):
@@ -21,9 +22,10 @@ def queryset(self, request, queryset):
2122
return queryset.filter(story__exact='')
2223

2324

24-
class RegisteredAdmin(admin.ModelAdmin):
25+
class RegisteredAdmin(admin.ModelAdmin, ExportCsvMixin):
2526
list_display = ('name', 'email', 'role', 'has_written_story', 'registered_at')
2627
list_filter = ('role', HasWrittenStoryListFilter, 'registered_at')
28+
actions = ["export_as_csv"]
2729

2830
admin.site.empty_value_display = 'desconhecido'
2931
admin.site.register(Registered, RegisteredAdmin)

nisia_cadastro/export.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from django.http import HttpResponse
2+
from django.utils.translation import gettext_lazy as _
3+
import csv
4+
5+
6+
class ExportCsvMixin:
7+
def export_as_csv(self, request, queryset):
8+
meta = self.model._meta
9+
field_names = [field.name for field in meta.fields]
10+
11+
response = HttpResponse(content_type='text/csv')
12+
response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
13+
writer = csv.writer(response)
14+
15+
writer.writerow(field_names)
16+
for obj in queryset:
17+
row = writer.writerow([getattr(obj, field) for field in field_names])
18+
19+
return response
20+
21+
export_as_csv.short_description = _('Exportar Selecionados')
22+

0 commit comments

Comments
 (0)