You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
4.7 KiB

# -*- 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)