From fa50517e8810cb38d2d12e761a8b4b6a530b1982 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Mon, 23 Sep 2019 11:43:13 +0200 Subject: [PATCH] add excel export option --- jdav_web/ludwigsburgalpin/admin.py | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/jdav_web/ludwigsburgalpin/admin.py b/jdav_web/ludwigsburgalpin/admin.py index a1c7f6c..7237265 100644 --- a/jdav_web/ludwigsburgalpin/admin.py +++ b/jdav_web/ludwigsburgalpin/admin.py @@ -1,6 +1,13 @@ +import os + from django.contrib import admin +from wsgiref.util import FileWrapper +from django.http import HttpResponse +from django.conf import settings from .models import Group, Termin +import xlsxwriter + class GroupAdmin(admin.ModelAdmin): list_display = ('name',) @@ -8,7 +15,37 @@ class GroupAdmin(admin.ModelAdmin): class TerminAdmin(admin.ModelAdmin): list_display = ('title','start_date', 'end_date', 'group') + list_filter = ('group',) + ordering = ('start_date','end_date') + actions = ['make_overview'] + + def make_overview(self, request, queryset): + filename = 'termine.xlsx' + workbook = xlsxwriter.Workbook(media_path(filename)) + bold = workbook.add_format({'bold': True}) + worksheet = workbook.add_worksheet() + worksheet.write(0, 0, "Titel", bold) + worksheet.write(0, 1, "Von", bold) + worksheet.write(0, 2, "Bis", bold) + worksheet.write(0, 3, "Gruppe", bold) + for row, termin in enumerate(queryset): + worksheet.write(row+2, 0, termin.title) + worksheet.write(row+2, 1, termin.start_date.strftime('%d.%m.%Y')) + worksheet.write(row+2, 2, termin.end_date.strftime('%d.%m.%Y')) + worksheet.write(row+2, 3, str(termin.group)) + workbook.close() + with open(media_path(filename), 'rb') as xls: + response = HttpResponse(FileWrapper(xls)) + response['Content-Type'] = 'application/xlsx' + response['Content-Disposition'] = 'attachment; filename='+filename + + return response + make_overview.short_description = "Termine in Excel Liste überführen" # Register your models here. admin.site.register(Group, GroupAdmin) admin.site.register(Termin, TerminAdmin) + + +def media_path(fp): + return os.path.join(os.path.join(settings.MEDIA_MEMBERLISTS, "memberlists"), fp)