# -*- 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.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #models and forms from models import Organiser from city.models import City from theme.models import Tag from forms import OrganiserForm from file.models import FileModel, TmpFile from file.forms import FileModelForm #python import random def organiser_add(request): """ Return form of organiser and post it on the server. If form is posted redirect on the page of all organiser. """ #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 = OrganiserForm(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('/organiser/all/') else: form = OrganiserForm(initial={'key':key}) args = {} args.update(csrf(request)) args['form'] = form args['languages'] = settings.LANGUAGES args['file_form'] = file_form args['files'] = TmpFile.objects.filter(key=key) return render_to_response('organiser_add.html', args) def organiser_change(request, organiser_id): """ Return form and fill it with existing Organiser object data. If form is posted redirect on the page of all organisers. """ try: #check if organiser_id exists else redirect to the list of organisers organiser = Organiser.objects.get(id=organiser_id) file_form = FileModelForm(initial={'model': 'organiser.Organiser'}) except: return HttpResponseRedirect('/organiser/all/') if request.POST: form = OrganiserForm(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(id=organiser_id) return HttpResponseRedirect('/organiser/all/') else: #fill form with data from database data = {'staff_number':organiser.staff_number, 'address': organiser.address, 'events_number':organiser.events_number, 'phone':organiser.phone, 'fax':organiser.fax, 'web_page':organiser.web_page, 'own_place': organiser.own_place, 'email':organiser.email, 'social':organiser.social, 'foundation': organiser.foundation} if organiser.country: data['country'] = organiser.country.id if organiser.city: data['city'] = organiser.city.id data['theme'] = [item.id for item in organiser.theme.all()] data['tag'] = [item.id for item in organiser.tag.all()] data['place'] = [item.id for item in organiser.place.all()] #data from translated fields for code, name in settings.LANGUAGES: obj = Organiser._meta.translations_model.objects.get(language_code = code,master__id=organiser_id) #access to translated fields data['name_%s' % code] = obj.name data['description_%s' % code] = obj.description data['specialization_%s' % code] = obj.specialization data['address_inf_%s' % code] = obj.address_inf data['representation_%s' % code] = obj.representation data['title_%s' % code] = obj.title data['keywords_%s' % code] = obj.keywords data['descriptions_%s' % code] = obj.descriptions #fill form form = OrganiserForm(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(organiser), object_id=getattr(organiser, 'id')) args['obj_id'] = organiser_id return render_to_response('organiser_add.html', args) def organiser_all(request): """ Return list of all organisers """ organisers = Organiser.objects.all() return render_to_response('organiser_all.html', {'organisers':organisers})