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

55 lines
2.1 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 Termin
import xlsxwriter
class TerminAdmin(admin.ModelAdmin):
list_display = ('title','start_date', 'end_date', 'group', 'responsible')
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)
worksheet.write(0, 4, "Organisator", bold)
worksheet.write(0, 5, "Telefonnummer", bold)
worksheet.write(0, 6, "Emailadresse", bold)
worksheet.write(0, 7, "Tourenbeschreibung/Anforderung", 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, termin.group)
worksheet.write(row+2, 4, termin.responsible)
worksheet.write(row+2, 5, termin.phone)
worksheet.write(row+2, 6, termin.email)
worksheet.write(row+2, 7, termin.description)
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(Termin, TerminAdmin)
def media_path(fp):
return os.path.join(os.path.join(settings.MEDIA_MEMBERLISTS, "memberlists"), fp)