You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kompass/jdav_web/ludwigsburgalpin/admin.py

52 lines
1.7 KiB
Python

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',)
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)