# -*- coding: utf-8 -*- from django.core.context_processors import csrf from django.shortcuts import render_to_response from django.http import HttpResponseRedirect, HttpResponse from django.contrib.auth.decorators import login_required # import xlwt import xlrd import tempfile # from custom_forms import ImportEventForm, ExportEventForm from excel_settings import sort_by_names, get_cell_style, get_cell from excel_settings import cols_width @login_required def import_event(request): if request.POST: form = ImportEventForm(request.POST, request.FILES) temp_file = tempfile.TemporaryFile() import_file = request.FILES.get(request.FILES.keys()[0]) book = xlrd.open_workbook(file_contents=import_file) sheet = book.sheet_by_index(0) row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] return HttpResponse(row_list[0]) else: form = ImportEventForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('import_event.html', args) def xls_to_response(xls, fname): response = HttpResponse(mimetype="application/ms-excel") response['Content-Disposition'] = 'attachment; filename=%s' % fname xls.save(response) return response import datetime from excel_settings import field_settings from django.db.models.loading import get_model def export_event(request): if request.POST: form = ExportEventForm(request.POST) if form.is_valid(): data = form.cleaned_data # get model model = get_model(data['event'].split('.')[0], data['event'].split('.')[1]) # get objects objects = model.objects.language(data['language']).filter(data_begin__range=[data['date_from'], data['date_to']], country__in=data['country'], theme__in=data['theme'] ).distinct() if not objects: # not found any objects message = 'По даному запросу объектов не найдено' args = {} args.update(csrf(request)) args['message'] = message args['form'] = form return render_to_response('export_event.html', args) workbook = xlwt.Workbook(encoding = 'utf8') # new tab worksheet = workbook.add_sheet('My Worksheet') # Create the Font for first rows font = xlwt.Font() font.name = 'Times New Roman' font.bold = True style = xlwt.XFStyle() # Create the Style style.font = font for row, object in enumerate(objects): for col, field in enumerate(field_settings): try: value = getattr(object, field['name']) except AttributeError: continue if row == 0: # first iteration. set names. set columns width worksheet.write(0, col, field.get('verbose_name', 'default'), style) worksheet.write(1, col, field.get('name'), style) worksheet.col(col).width = field.get('width', 3333) worksheet.write(row+2, col, field.get('type', str)(value)) return xls_to_response(workbook, 'My Worksheet.xls') else: form = ExportEventForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('export_event.html', args) """ def export_event(request): if request.POST: form = ExportEventForm(request.POST) if form.is_valid(): # dict of objects objects = form.generate_dicts() return HttpResponse(str(objects)) if not objects: # empty dict message = 'По даному запросу объектов не найдено' args = {} args.update(csrf(request)) args['message'] = message args['form'] = form return render_to_response('export_event.html', args) workbook = xlwt.Workbook(encoding = 'utf8') # new tab worksheet = workbook.add_sheet('My Worksheet') # Create the Font font = xlwt.Font() font.name = 'Times New Roman' font.bold = True style = xlwt.XFStyle() # Create the Style style.font = font # get names of fields sorted like in sorted_names list fields = sorted(objects[0].keys(), key=sort_by_names) # generate first row with verbose names for i, field in enumerate(fields): worksheet.write(0, i, objects[0][field]['verbose_name'], style) # generate second row and set columns width for i, field in enumerate(fields): worksheet.write(1, i,field, style) if field in cols_width: worksheet.col(i).width = cols_width.get(field, 3333) # fill row with objects for row, object in enumerate(objects): for key, value in object.iteritems(): # current row col = fields.index(key) # begins from third row # get cell formats value (True -> 1, None -> '', ...) worksheet.write(row+2, col, get_cell(key, value['value']), get_cell_style(key)) return xls_to_response(workbook, 'My Worksheet.xls') else: form = ExportEventForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('export_event.html', args) """