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.
 
 
 
 
 
 

163 lines
5.9 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
from django.db.models.loading import get_model
import json
#model and forms
from models import News
from news.forms import NewsForm, NewsChangeForm
from exposition.models import Exposition
from conference.models import Conference
from theme.models import Tag
from file.models import FileModel, TmpFile
from file.forms import FileModelForm
#python
import random
#custom views
from functions.custom_views import objects_list
def news_all(request):
"""
Return list of all news with pagination
"""
return objects_list(request, News, 'news_all.html')
@login_required
def news_add(request):
"""
Return form of company and post it on the server.
If form is posted redirect on the page of all companies.
"""
#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 = NewsForm(request.POST)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
if request.POST['event'] == 'exposition.Exposition':
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'conference.Conference':
form.fields['event_id'].choices = [(item.id, item.name) for item in Conference.objects.all()]
if form.is_valid():
form.save()
return HttpResponseRedirect('/news/all/')
else:
form = NewsForm(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('news_add.html', args)
@login_required
def news_change(request, url):
"""
Return form and fill it with existing News object data.
If form is posted redirect on the page of all news.
"""
try:
#check if url exists else redirect to the list of seminars
news = News.objects.get(url=url)
news_id = getattr(news, 'id')
file_form = FileModelForm(initial={'model': 'news.News'})
except:
return HttpResponseRedirect('/news/all')
if request.POST:
form = NewsChangeForm(request.POST)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
if request.POST['event'] == 'exposition.Exposition':
form.fields['event_id'].choices = [(item.id, item.name) for item in Exposition.objects.all()]
if request.POST['event'] == 'conference.Conference':
form.fields['event_id'].choices = [(item.id, item.name) for item in Conference.objects.all()]
if form.is_valid():
form.save(news_id)
return HttpResponseRedirect('/news/all')
else:
#fill form with data from database
data = {'date':news.date, 'type':news.type, 'paid': news.paid}
if news.organiser:
data['organiser'] = news.organiser.id
#
if news.content_type:
data['event'] = 'conference.Conference' if news.content_type.model=='conference'\
else 'exposition.Exposition'
#if news.content_type.model=='conference':
# data['event'] = 'conference.Conference'
#elif news.content_type.model=='exposition':
# data['event'] = 'exposition.Exposition'
data['event_id'] = news.object_id
data['theme'] = [item.id for item in news.theme.all()]
data['tag'] = [item.id for item in news.tag.all()]
#data from translated fields
for code, name in settings.LANGUAGES:
obj = News._meta.translations_model.objects.get(language_code = code,master__id=news_id) #access to translated fields
data['main_title_%s' % code] = obj.main_title
data['preview_%s' % code] = obj.preview
data['description_%s' % code] = obj.description
data['title_%s' % code] = obj.title
data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions
form = NewsChangeForm(initial=data)
#set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
if data.get('event'):
if data['event'] == 'conference.Conference':
events = [(item.id, item.name) for item in Conference.objects.all()]
elif data['event'] == 'exposition.Exposition':
events = [(item.id, item.name) for item in Exposition.objects.all()]
form.fields['event_id'].choices = events
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(news), object_id=getattr(news, 'id'))
args['obj_id'] = news_id
return render_to_response('news_add.html', args)
def get_event_id(request):
"""
"""
if request.GET['model'] != 'None':
Model = get_model(request.GET['model'].split('.')[0], request.GET['model'].split('.')[1])
events= Model.objects.all()
#events = json.dumps([(item.id, item.name) for item in data])
return render_to_response('select.html', {'objects': events})
else:
return HttpResponse()