# -*- 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 accounts.models import User 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 #custom functions from functions.custom_views import objects_list, add_object_with_file def organiser_all(request): """ Return list of all organisers with pagination """ return objects_list(request, Organiser, 'organiser_all.html') 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. """ return add_object_with_file(request, OrganiserForm, 'organiser_add.html', '/admin/organiser/all/', choices={'city': City, 'tag': Tag}) def organiser_change(request, url): """ Return form and fill it with existing Organiser object data. If form is posted redirect on the page of all organisers. """ organiser = Organiser.objects.safe_get(url=url) # try get user by id if doesnt work by url if organiser is None: organiser = Organiser.objects.safe_get(id=url) #redirect to list of all organisers if cannot find organiser if organiser is None: return HttpResponseRedirect('/admin/organiser/all/') #get id organiser_id = getattr(organiser, 'id') #init FileModelForm file_form = FileModelForm(initial={'model': 'organiser.Organiser'}) 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('/admin/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, 'url':organiser.url, 'email':organiser.email, 'social':organiser.social, 'foundation': organiser.foundation} data['user'] = User.objects.safe_get(organiser=organiser) 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_exposition'] = [item.id for item in organiser.place_exposition.all()] data['place_conference'] = [item.id for item in organiser.place_conference.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(initial=data) form.fields['city'].widget.attrs['data-init-text'] = organiser.city.name #set choices filled by ajax #form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data.get('country'))] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data.get('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)