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.
 
 
 
 
 
 

136 lines
5.4 KiB

# -*- coding: utf-8 -*-
from django import forms
from django.conf import settings
languages = [code for code in settings.LANGUAGES]
class ImportEventForm(forms.Form):
excel_file = forms.FileField(label='Выберите файл')
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition', 'Выставка'),
('conference', 'Конференция'),
('seminar', 'Семинар'),
('webinar', 'Вебинар')])
language = forms.ChoiceField(label='Выберите язык', choices=languages)
from theme.models import Theme
from country.models import Country
from django.db.models.loading import get_model
import StringIO
from functions.translate import get_all_fields, get_all_verbose_names
class ExportEventForm(forms.Form):
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition.Exposition', 'Выставка'),
('conference.Conference', 'Конференция'),
('seminar.Seminar', 'Семинар'),
('webinar.Webinar', 'Вебинар')])
language = forms.ChoiceField(label='Выберите язык', choices=languages)
date_from = forms.DateField(label='С')
date_to = forms.DateField(label='До')
theme = forms.ModelMultipleChoiceField(label='Направление', queryset=Theme.objects.all(), required=False)
country = forms.ModelMultipleChoiceField(label='Страны', queryset=Country.objects.all(), required=False)
def generate_dicts(self):
data = self.cleaned_data
event = data['event']
language = data['language']
date_from = data['date_from']
date_to = data['date_to']
theme = data['theme']
country = data['country']
# get model of event
model = get_model(event.split('.')[0], event.split('.')[1])
#
objects = model.objects.language(language).filter(data_begin__range=[date_from, date_to],
country__in=country,
theme__in=theme
).distinct()
if not objects:
return None
# get fields
# in list exclude fields
fields = get_all_fields(objects[0],['organiser', 'tag', 'descriptions', 'keywords', 'title', 'theme',
'users', 'company', 'translations', 'business_program', 'created',
'modified'])
# readable names
names = get_all_verbose_names(objects[0], fields)
objects_list = []
for object in objects:
obj_dict = {}
# generate dict with field values
for field in fields:
obj_dict = {'name': field, 'value': getattr(object, field),
'verbose_name': names[field]}
#obj_dict[field] = {'value': getattr(object, field), 'verbose_name': names[field]}
objects_list.append(obj_dict)
return objects_list
"""
def generate_dicts(self):
data = self.cleaned_data
event = data['event']
language = data['language']
date_from = data['date_from']
date_to = data['date_to']
theme = data['theme']
country = data['country']
# get model of event
model = get_model(event.split('.')[0], event.split('.')[1])
#
objects = model.objects.language(language).filter(data_begin__range=[date_from, date_to],
country__in=country,
theme__in=theme
).distinct()
if not objects:
return None
# get fields
# in list exclude fields
fields = get_all_fields(objects[0],['organiser', 'tag', 'descriptions', 'keywords', 'title', 'theme',
'users', 'company', 'translations', 'business_program', 'created',
'modified'])
# readable names
names = get_all_verbose_names(objects[0], fields)
objects_list = []
for object in objects:
obj_dict = {}
# generate dict with field values
for field in fields:
obj_dict[field] = {'value': getattr(object, field), 'verbose_name': names[field]}
objects_list.append(obj_dict)
return objects_list
"""
def clean_theme(self):
"""
Set all themes if no theme selected
"""
theme = self.cleaned_data.get('theme')
if not theme:
theme = Theme.objects.all()
return theme
def clean_country(self):
"""
Set all countries if no country selected
"""
country = self.cleaned_data.get('country')
if not country:
country = Country.objects.all()
return country