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