from django.contrib.formtools.wizard.views import SessionWizardView from django.core.files.storage import FileSystemStorage from django.http import HttpResponseRedirect from django.conf import settings import os from photologue.models import Photo, Gallery from exposition.models import Exposition, Statistic from wizard.models import Attachment from functions.form_check import translit_with_separator # defining different template for every form TEMPLATES = { '0': 'client/wizard/first_step.html', '1': 'client/wizard/second_step.html', '2': 'client/wizard/third_step.html' } post = None files = None # main view that handle all data from 3 forms(steps) and finally create an Exposition class ExpoWizard(SessionWizardView): location = os.path.join(settings.MEDIA_ROOT, 'temp') file_storage = FileSystemStorage(location, settings.MEDIA_URL) def done(self, form_list, **kwargs): upload_logo = form_list[0].cleaned_data.get('logo') upload_images = self.request.FILES.getlist(u'2-attachments') data = self.get_all_cleaned_data() expo = Exposition.objects.language(self.request.LANGUAGE_CODE).create( name=data.get('name'), data_begin=data.get('date_start'), data_end=data.get('date_end'), main_title=data.get('main_title'), description=data.get('description'), products=data.get('products'), country=data.get('country', 1), city=data.get('city', 1), place=data.get('place', 1), periodic=data.get('periodic'), web_page=data.get('web_site'), logo=data.get('logo'), foundation_year=data.get('found_year'), area=data.get('square'), price_day=data.get('one_day'), price_all=data.get('all_days'), price_day_bar=data.get('pre_one_day'), price_all_bar=data.get('pre_all_days'), min_area=data.get('min_square'), registration_payment=data.get('registration_depos'), application_deadline=data.get('deadline_date'), min_closed_area=data.get('unequiped'), min_open_area=data.get('open_square'), min_closed_equipped_area=data.get('equiped'), url=translit_with_separator(data.get('name')), quality_label=0, audience=0 ) photos = [] for i, photo in enumerate(upload_images): photos.append(Photo.objects.language(self.request.LANGUAGE_CODE).create( image=photo, title=data.get(u'pdescr_%i' % i, photo.name)) ) for photo in photos: expo.upload_photo(photo) expo.tag = [data.get('tag')] expo.theme = [data.get('theme')] if data['membership1']: expo.quality_label = (expo.quality_label | Exposition.quality_label.exporating) if data['membership2']: expo.quality_label = (expo.quality_label | Exposition.quality_label.rsva) if data['membership3']: expo.quality_label = (expo.quality_label | Exposition.quality_label.ufi) if data['audience1']: expo.audience = (expo.audience | Exposition.audience.experts) if data['audience2']: expo.audience = expo.audience | getattr(Exposition.audience, 'experts and consumers') if data['audience3']: expo.audience = expo.audience | (getattr(Exposition.audience, 'general public')) expo.save() Statistic.objects.language().create( exposition=expo, year=data.get('statistic_year'), visitors=data.get('visitors'), members=data.get('partisipants'), countries=data.get('countries'), area=data.get('square') ) if upload_logo: self.file_storage.delete(upload_logo.name) if upload_images: for f in upload_images: self.file_storage.delete(f.name) return HttpResponseRedirect('/') def get_template_names(self): return [TEMPLATES[self.steps.current]] from wizard.forms import formlist wizard_view = ExpoWizard.as_view(formlist) from django.contrib.formtools.wizard.storage.session import SessionStorage from django.http import HttpResponse import json def ajax_view(request): form = formlist[2](post, files, prefix='2') return HttpResponse(json.dumps({'posts':post,'files':files}), content_type='application/json')