# -*- 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, NewsDeleteForm 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, delete_object from functions.views_help import get_referer def news_all(request): """ Return list of all news with pagination """ return objects_list(request, News, 'news_all.html') @login_required def news_copy(request, url): news = News.objects.safe_get(url=url) if not news: return HttpResponseRedirect(get_referer(request)) else: news.clone() return HttpResponseRedirect(get_referer(request)) def news_delete(request, url): return delete_object(request, News, NewsDeleteForm, url, '/admin/news/all') @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('/admin/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('/admin/news/all') 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(news_id) return HttpResponseRedirect('/admin/news/all') else: #fill form with data from database data = {'date':news.date, 'type':news.type, 'paid': news.paid} if news.user: data['user'] = news.user.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 = NewsForm(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): """ get events(expostions or conferences) """ 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()