# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.http import HttpResponseRedirect, HttpResponse from django.core.context_processors import csrf from django.conf import settings from django.forms.formsets import BaseFormSet, formset_factory from django.forms.models import modelformset_factory from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required # from models import Exposition, TimeTable from forms import ExpositionChangeForm, ExpositionCreateForm, TimeTableForm from theme.models import Tag from city.models import City from file.models import FileModel, TmpFile from file.forms import FileModelForm #python import random @login_required def exposition_add(request): """ Returns form of exposition and post it on the server. If form is posted redirect on the page of all expositions. """ #if form would be not valid key must be same if request.POST.get('key'): key = request.POST['key'] else: key = random.getrandbits(128) file_form = FileModelForm(initial={'key': key}) if request.POST: form = ExpositionCreateForm(request.POST) #set choices filled by ajax form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])] if form.is_valid(): form.save() return HttpResponseRedirect('/exposition/all/') else: form = ExpositionCreateForm(initial={'key': key}) args = {} args.update(csrf(request)) args['form'] = form args['file_form'] = file_form args['files'] = TmpFile.objects.filter(key=key) args['languages'] = settings.LANGUAGES return render_to_response('exposition_add.html', args) @login_required def exposition_change(request, url): """ Return form of exposition and fill it with existing Exposition object data. If form of exposition is posted redirect on the page of all expositions. """ try: #check if exposition_id exists else redirect to the list of expositions exposition = Exposition.objects.get(url=url) file_form = FileModelForm(initial={'model': 'exposition.Exposition'}) except: return HttpResponseRedirect('/exposition/all/') if request.POST: form = ExpositionChangeForm(request.POST) #set choices filled by ajax form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])] if form.is_valid(): form.save(getattr(exposition, 'id')) return HttpResponseRedirect('/exposition/all/') else: #fill form with data from database data = {'web_page':exposition.web_page, 'foundation_year': exposition.foundation_year, 'data_begin':exposition.data_begin, 'data_end':exposition.data_end, 'periodic':exposition.periodic, 'audience':exposition.audience, 'min_area':exposition.min_area, 'currency':exposition.currency, 'tax':exposition.tax, 'min_closed_area':exposition.min_closed_area, 'max_closed_area':exposition.max_closed_area, 'min_closed_equipped_area':exposition.min_closed_equipped_area, 'max_closed_equipped_area':exposition.max_closed_equipped_area, 'min_open_area':exposition.min_open_area, 'max_open_area':exposition.max_open_area, 'registration_payment':exposition.registration_payment} if exposition.country: data['country'] = exposition.country.id if exposition.city: data['city'] = exposition.city.id if exposition.place: data['place'] = exposition.place.id data['theme'] = [item.id for item in exposition.theme.all()] data['tag'] = [item.id for item in exposition.tag.all()] #data from translated fields for code, name in settings.LANGUAGES: obj = Exposition._meta.translations_model.objects.get(language_code = code,master__id=getattr(exposition, 'id')) #access to translated fields data['name_%s' % code] = obj.name data['description_%s' % code] = obj.description data['main_title_%s' % code] = obj.main_title data['time_%s' % code] = obj.time data['products_%s' % code] = obj.products data['title_%s' % code] = obj.title data['keywords_%s' % code] = obj.keywords data['descriptions_%s' % code] = obj.descriptions #initial form form = ExpositionChangeForm(initial=data) #set choices filled by ajax form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] args = {} args.update(csrf(request)) args['form'] = form args['languages'] = settings.LANGUAGES args['file_form'] = file_form #get list of files which connected with specific model object args['files'] = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(exposition), object_id=getattr(exposition, 'id')) args['obj_id'] = getattr(exposition, 'id') return render_to_response('exposition_add.html', args) @login_required def exposition_all(request): """ Return list of all expositions """ expositions = Exposition.objects.all() return render_to_response('exposition_all.html', {'expositions':expositions})