Version to run on serve #1
@@ -2,8 +2,10 @@
|
||||
from django.contrib import admin
|
||||
from cms.extensions import PageExtensionAdmin
|
||||
from parler.admin import TranslatableAdmin
|
||||
|
||||
from aldryn_forms.models import FormSubmission
|
||||
from aldryn_forms.admin.base import BaseFormSubmissionAdmin
|
||||
from project.models import ImageExtension, SliderItemQualification, Notification
|
||||
from project.views import CustomFormExportWizardView
|
||||
|
||||
|
||||
@admin.register(ImageExtension)
|
||||
@@ -19,3 +21,15 @@ class SliderItemQualificationAdmin(TranslatableAdmin):
|
||||
@admin.register(Notification)
|
||||
class NotificationAdmin(TranslatableAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.unregister(FormSubmission)
|
||||
|
||||
|
||||
@admin.register(FormSubmission)
|
||||
class FormSubmissionAdmin(BaseFormSubmissionAdmin):
|
||||
|
||||
def get_form_export_view(self):
|
||||
return CustomFormExportWizardView.as_view(admin=self, file_type='xls')
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,10 @@ from cms.models import Page
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.views.generic import RedirectView
|
||||
from django.views.generic.edit import FormView
|
||||
|
||||
from aldryn_forms.admin.views import FormExportWizardView
|
||||
from aldryn_forms.admin.exporter import Exporter
|
||||
from tablib import Dataset
|
||||
from django.http import HttpResponse
|
||||
from project.forms import NewsletterSubscriptionForm
|
||||
|
||||
|
||||
@@ -45,3 +48,57 @@ class MediaRedirectView(RedirectView):
|
||||
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
return self.request.GET.get('url', None)
|
||||
|
||||
|
||||
class CustomExporter(Exporter):
|
||||
custom_fields = ['sent_at']
|
||||
|
||||
def get_dataset(self, fields):
|
||||
headers = [field.rpartition('-')[0] for field in fields]
|
||||
|
||||
for custom_field in self.custom_fields:
|
||||
headers.append(custom_field)
|
||||
|
||||
dataset = Dataset(headers=headers)
|
||||
|
||||
for submission in self.queryset.only('data').iterator():
|
||||
row_data = []
|
||||
form_fields = [field for field in submission.get_form_data()
|
||||
if field.field_id in fields]
|
||||
|
||||
for header in fields:
|
||||
for field in form_fields:
|
||||
if field.field_id == header:
|
||||
row_data.append(field.value)
|
||||
break
|
||||
else:
|
||||
row_data.append('')
|
||||
|
||||
if row_data:
|
||||
for custom_field in self.custom_fields:
|
||||
row_data.append(getattr(submission, custom_field).strftime('%d.%m.%Y %H:%M:%S'))
|
||||
dataset.append(row_data)
|
||||
return dataset
|
||||
|
||||
|
||||
class CustomFormExportWizardView(FormExportWizardView):
|
||||
|
||||
def done(self, form_list, **kwargs):
|
||||
"""
|
||||
this step only runs if all forms are valid.
|
||||
"""
|
||||
form_iter = iter(form_list)
|
||||
step_1_form = next(form_iter)
|
||||
step_2_form = next(form_iter)
|
||||
|
||||
fields = step_2_form.get_fields()
|
||||
queryset = step_1_form.get_queryset()
|
||||
|
||||
dataset = CustomExporter(queryset=queryset).get_dataset(fields=fields)
|
||||
|
||||
filename = step_1_form.get_filename(extension=self.file_type)
|
||||
|
||||
content_type = self.get_content_type()
|
||||
response = HttpResponse(dataset.xls, content_type=content_type)
|
||||
response['Content-Disposition'] = 'attachment; filename=%s' % filename
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user