Exclude Statistic from form wizard, make some 'friendly' UI for selects, cheking for organiser to add exposition

remotes/origin/1203
Ivan Kovalkovskyi 11 years ago
parent a0e4654cf5
commit c6e45fbe3b
  1. 3
      accounts/models.py
  2. 46
      core/models.py
  3. 7
      meta/forms.py
  4. 53
      meta/models.py
  5. 1
      meta/views.py
  6. 1
      static/custom_js/place_city_ajax.js
  7. 167
      static/custom_js/wizard.js
  8. 16
      templates/admin/meta/create_seo_text.html
  9. 5
      templates/client/blank.html
  10. 5
      templates/client/includes/header.html
  11. 5
      templates/client/includes/meta.html
  12. 69
      templates/client/wizard/first_step.html
  13. 71
      templates/client/wizard/second_step.html
  14. 35
      wizard/forms.py
  15. 11
      wizard/urls.py
  16. 63
      wizard/views.py

@ -144,6 +144,9 @@ class User(AbstractBaseUser, PermissionsMixin):
class Meta:
ordering=['-rating']
def is_organiser(self):
return bool(self.organiser)
def get_full_name(self):
"""
Returns the first_name plus the last_name, with a space in between.

@ -4,7 +4,7 @@ from django.shortcuts import get_object_or_404
from django.db import models
from exposition.models import Exposition
from settings.models import create_transl_fields
import copy
from theme.models import Theme
from country.models import Country
from city.models import City
@ -114,22 +114,38 @@ class Page(TranslatableModel):
def get_absolute_url(self):
return reverse('page_view', args=[self.url])
def __init__(self, *args, **kwargs):
super(Page, self).__init__(*args, **kwargs)
self.cache_fields = ['h1', 'body','title', 'description', 'keywords']
self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields}
self.is_new = True
def save(self, *args, **kwargs):
super(Page,self).save(*args, **kwargs)
all_field_names = list(self._translated_field_names)
clear_f_n = list(set(all_field_names) - {'master', 'master_id', 'id', 'language_code'})
field_items = {}
for fname in clear_f_n:
field_items[fname] = getattr(self, fname)
langs = [lan[0] for lan in settings.LANGUAGES]
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for key, value in field_items.items():
setattr(self, key, value)
self.save_translations(self)
self.initial_language = 'ru'
new_values = {field: getattr(self, field) for field in self.cache_fields}
langs = [code for code, _ in settings.LANGUAGES]
if self.is_new:
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for key, value in new_values.items():
setattr(self, key, value)
self.save_translations(self)
else:
translations = {obj.language_code:obj for obj in list(self.translations.all())}
for lang in langs:
if lang is not self.initial_language:
tr = translations[lang]
for key, value in new_values.items():
#if u'%s' % getattr(self, key) is u'' or getattr(self, key) is u'%s' % self.var_cache[key]:
setattr(tr, key, value)
tr.save()
self.lazy_translation_getter(self.initial_language)
self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields}
self.is_new = False
return self
def __unicode__(self):

@ -46,13 +46,14 @@ class MetaForm(forms.Form):
fill_with_signal(MetaSetting, meta, data)
meta.save()
class MetaFilterForm(AdminFilterForm):
model = MetaSetting
class SeoTextForm(TranslatableModelForm):
# lang = forms.ChoiceField(choices=settings.LANGUAGES)
class Meta:
model = SeoText
fields = ['url', 'title', 'body']
widgets = {'body':CKEditorWidget}
fields = ['url', 'title', 'page_title', 'description', 'body']
widgets = {'body': CKEditorWidget}

@ -142,11 +142,12 @@ class SeoTextManager(TranslationManager):
class SeoText(TranslatableModel):
cache_fields = ['title', 'body']
url = models.CharField(max_length=50, unique=True, verbose_name=u"URL: expomap.ru")
url = models.CharField(max_length=50, unique=True, verbose_name=u"URL: www.expomap.ru")
translations = TranslatedFields(
title=models.CharField(max_length=255, verbose_name=u"Заголовок"),
page_title=models.CharField(max_length=255, verbose_name=u"Тайтл страницы"),
description=models.CharField(max_length=1000, verbose_name=u"Дескрипшн"),
body=models.TextField(verbose_name=u"Текст")
)
@ -154,36 +155,38 @@ class SeoText(TranslatableModel):
def __init__(self, *args, **kwargs):
super(SeoText, self).__init__(*args, **kwargs)
self.cache_fields = ['title', 'body', 'page_title', 'description']
self.is_new = True
self.var_cache = {var: copy.copy(getattr(self, var)) for var in SeoText.cache_fields}
def get_absolute_url(self):
return reverse_lazy('seo_all')
return self.url
def save(self, *args, **kwargs):
init_lang = self.language_code
self.is_new = bool(self.id)
if not self.is_new: super(SeoText, self).save(*args, **kwargs)
field_items = {}
for fname in self.cache_fields:
field_items[fname] = getattr(self, fname)
langs = [l[0] for l in settings.LANGUAGES]
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for key, value in field_items.items():
if getattr(self, key) is '' or getattr(self, key) is self.var_cache[key]:
super(SeoText, self).save(*args, **kwargs)
self.initial_language = 'ru'
new_values = {field: getattr(self, field) for field in self.cache_fields}
langs = [code for code, _ in settings.LANGUAGES]
if self.is_new:
for lang in langs:
if lang not in self.get_available_languages():
self.translate(lang)
for key, value in new_values.items():
setattr(self, key, value)
if self.is_new:
self.save_translations(self)
else:
super(SeoText, self).save(*args, **kwargs)
self.translate(init_lang)
self.var_cache = {var: copy.copy(getattr(self, var)) for var in SeoText.cache_fields}
else:
translations = {obj.language_code:obj for obj in list(self.translations.all())}
for lang in langs:
if lang is not self.initial_language:
tr = translations[lang]
for key, value in new_values.items():
#if u'%s' % getattr(self, key) is u'' or getattr(self, key) is u'%s' % self.var_cache[key]:
setattr(tr, key, value)
tr.save()
self.lazy_translation_getter(self.initial_language)
self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields}
self.is_new = False
return self
def __unicode__(self):

@ -208,6 +208,7 @@ class EditSeoText(UpdateView):
template_name = "admin/meta/create_seo_text.html"
class DeleteSeoText(DeleteView):
model = SeoText
template_name = "admin/meta/seo_confirm_delete.html"

@ -14,6 +14,5 @@
$('#id_city').attr('disabled', false);
});
});
});

@ -0,0 +1,167 @@
/**
* Created by dev on 07.09.2015.
*/
$(document).ready(function () {
$('select').select2({
width: 'element',
allowClear: true
});
$('#id_country').change(function () {
$.get(
"/admin/ajax_city/", {'id': $(this).val()}, function (j) {
$('#id_city').html(j);
$('#id_city').attr('disabled', false);
});
});
$('#id_place').select2({
placeholder:"Место проведения",
widht: 400
});
$('#id_city').select2({
placeholder: "Город",
width: 300,
ajax: {
url: "/admin/city/search/",
dataType: "json",
quietMillis: 200,
data: function (term, page, country) {
var country = $('#id_country').val()
return {
term: term,
page: page,
country: country
};
},
results: function (data) {
var results = [];
$.each(data, function (index, item) {
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection: function (element, callback) {
var id = $(element).val();
var text = $(element).attr('data-init-text');
callback({id: id, text: text});
}
});
$('#id_0-periodic').select2({
placeholder: "Периодичность",
width: '350px'
});
$('#id_tag').select2({
placeholder: "Теги",
width: '350px',
multiple: true,
ajax: {
url: "/admin/theme/tag/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page, theme) {
var theme = $('#id_theme').serialize().replace(/0-theme/g, 'theme');
return {
term: term,
page: page,
theme: theme
};
},
results: function (data) {
var results = [];
$.each(data, function (index, item) {
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection: function (element, callback) {
var data = [];
$(element.val().split(",")).each(function (i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
// end selects
/*
*/
// theme change
$('#id_theme').change(function () {
$.get(
"/admin/ajax_tag/", {'id': $(this).serialize().replace(/0-theme/g, 'theme')}, function (data) {
var optionValues = [];
var getValues = [];
var selectedValues = [];
//push values sended from server in array
$.each(data, function (i, elem) {
getValues.push(elem[0].toString())
});
//delete options if they aren't in getvalues
//otherwise push it in array
//also push in array already selected values
$('#id_tag option').each(function () {
var check = $.inArray($(this), getValues);
if ($(this).is(':selected')) {
selectedValues.push($(this).val())
}
if (check == -1) {
$(this).remove()
}
else {
optionValues.push($(this).val());
}
});
//generate new options
//old options unchanged
var html = '';
$.each(data, function (i, elem) {
var check = $.inArray(elem[0].toString(), optionValues);
if (check == -1) {
html += '<option value="';
html += elem[0];
html += '">';
html += elem[1];
html += '</option>';
}
});
$('#id_tag').append(html);
//select previous selected values
$('#id_tag option').each(function () {
var check = $.inArray($(this).val(), selectedValues)
if (check != -1) {
$(this).attr('selected', 'selected');
}
});
});//end get
});//end change
console.log("hello from wizard.js");
});

@ -41,6 +41,22 @@
<span class="help-inline">{{ form.title.errors }}</span>
</div>
</div>
{# page title #}
<div class="control-group {% if form.page_title.errors %}error{% endif %}">
<label class="control-label">{{ form.page_title.label }}:</label>
<div class="controls">
{{ form.page_title }}
<span class="help-inline">{{ form.page_title.errors }}</span>
</div>
</div>
{# description #}
<div class="control-group {% if form.description.errors %}error{% endif %}">
<label class="control-label">{{ form.description.label }}:</label>
<div class="controls">
{{ form.description }}
<span class="help-inline">{{ form.description.errors }}</span>
</div>
</div>
{# body #}
<div class="control-group {% if form.body.errors %}error{% endif %}">
<label class="control-label">{{ form.body.label }}:</label>

@ -21,7 +21,7 @@ This template include basic anf main styles and js files,
<html class="no-js"> <!--<![endif]-->
<!--if IE 8><script src="js/selectivizr-min.js"></script><![endif]-->
<head>
{% include 'includes/meta.html' %}
{% include 'client/includes/meta.html' %}
<meta name="cmsmagazine" content="ca270688603566278c9006a1511705b1" />
<meta name="ktoprodvinul" content="7bf9e596b7b6707a" />
<link rel="icon" href="{% static 'client/img/favicon.ico' %}" type="image/x-icon" />
@ -45,6 +45,9 @@ This template include basic anf main styles and js files,
<script src="{% static 'client/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js' %}"></script>
<script src="{% static 'client/js/vendor/jquery-1.10.1.min.js' %}"></script>
<script src="{% static 'client/js/jquery-ui-1.10.4.custom.min.js' %}" type="text/javascript"></script>
{% block head_scripts %}
{% endblock %}
{% if request.GET.debug == '1' %}
<script src="{% static 'client/js/_modules/block.common.js' %}"></script>
{% else %}

@ -11,11 +11,10 @@
<div class="header-body mcl">
<div class="header-top clearfix">
<div class="ht-main">
{% if user.is_authenticated %}
{% if user.organiser %}
<div class="add-link"><a class="l-button ico" href="#">{% trans 'добавить событие' %}</a></div>
{% if user.is_organiser %}
<div class="add-link"><a class="l-button ico" href="{% url "add_exposition" %}">добавить событие </a></div>
{% endif %}
{% endif %}

@ -2,7 +2,10 @@
{% load i18n %}
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
{% if meta %}
{% if seotext %}
{% if seotext.description %}{% meta 'description' seotext.description %}{% endif %}
{% if seotext.page_title %}<title>{{ seotext.page_title }}</title>{% endif %}
{% elif meta %}
{% if meta.description %}{% meta 'description' meta.description %}{% endif %}
{% if meta.keywords %}{% meta_list 'keywords' meta.keywords %}{% endif %}
{% if meta.title %}<title>{{ meta.title }}</title>{% endif %}

@ -1,4 +1,10 @@
{% extends 'client/base_catalog.html' %}
{% load static %}
{% block head_scripts %}
<script src="{% static 'js/select/select2.js' %}"></script>
<script src="{% static 'custom_js/wizard.js' %}"></script>
{% endblock %}
{% block content_list %}
{{ form.errors }}
@ -8,14 +14,8 @@
{{ wizard.form.media }}
<h3>Шаг {{ wizard.steps.step1 }}. Основная информация</h3>
</div>
<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
<form action="" enctype="multipart/form-data" method="post">{% csrf_token %}
{{ wizard.management_form }}
{# {% if wizard.form.forms %}#}
{# {{ wizard.form.management_form }}#}
{# {% for form in wizard.form.forms %}#}
{# {{ form }}#}
{# {% endfor %}#}
{# {% else %}#}
{% with wizard.form as form %}
<div class="adm-form-body">
<div class="mf-line ">
@ -77,14 +77,14 @@
<div class="mf-line">
<div class="mf-field">
<h3>Место проведения:</h3>
<h3>Место проведения:</h3>
{{ form.place }}
</div>
</div>
<div class="mf-line">
<div class="mf-field">
<h3>Страна:</h3>
<h3>Страна:</h3>
{{ form.country }}
</div>
@ -107,13 +107,14 @@
<div class="clearfix">
<div class="mff-col">
<label class="check">{{ form.audience1 }}специалисты</label>
<label class="check">{{ form.audience2 }}специалисты и
<label class="checkbox">{{ form.audience1 }}специалисты</label>
<label class="checkbox">{{ form.audience2 }}специалисты и
потребители</label>
<label class="check">{{ form.audience3 }}широкая публика</label>
<label class="checkbox">{{ form.audience3 }}широкая публика</label>
</div>
<div class="mff-col">
Периодичность:
{{ form.periodic }}
</div>
</div>
@ -127,9 +128,9 @@
<label>Членства и знаки качества:</label>
<div class="mf-field">
<label class="check">{{ form.membership1 }}Exporating</label>
<label class="check">{{ form.membership2 }}RSVA</label>
<label class="check">{{ form.membership3 }}UFI</label>
<label class="checkbox">{{ form.membership1 }}Exporating</label>
<label class="checkbox">{{ form.membership2 }}RSVA</label>
<label class="checkbox">{{ form.membership3 }}UFI</label>
<hr/>
</div>
</div>
@ -150,12 +151,6 @@
<div id="work-time" class="mf-field">
<div class="w-time">
{# <div class="w-time-day">#}
{# <select name="d01">#}
{# <option value="12.04.2014">12.04.2014</option>#}
{# </select>#}
{# </div>#}
<div class="w-time-wrap">
<label>c</label>
{{ form.time_start }}
@ -165,10 +160,7 @@
<label>до</label>
{{ form.time_end }}
</div>
{# <label class="check"><input type="checkbox" class="w-time-switcher" name="c05" checked />Один график на все дни</label>#}
</div>
</div>
</div>
@ -195,24 +187,23 @@
</div>
</form>
</form>
{% endwith %}
</div>
</div>
<div class="set-sect p-form adm-form not-active">
<div class="set-sect-title clearfix">
<h3>Шаг 2. Статистика и условия участия</h3>
</div>
</div>
<div class="set-sect p-form adm-form not-active">
<div class="set-sect-title clearfix">
<h3>Шаг 2. Статистика и условия участия</h3>
</div>
</div>
<div class="set-sect p-form adm-form not-active">
<div class="set-sect-title clearfix">
<h3>Шаг 3. Добавление фото</h3>
</div>
</div>
<div class="set-sect p-form adm-form not-active">
<div class="set-sect-title clearfix">
<h3>Шаг 3. Добавление фото</h3>
</div>
</div>
</div>
<hr/>
{# {% endif %}#}
</div>
<hr/>
{% endblock %}

@ -1,4 +1,19 @@
{% extends 'client/base_catalog.html' %}
{% load static %}
{% block head_scripts %}
<script src="{% static 'js/select/select2.js' %}"></script>
<script>
$(document).ready(function () {
$('select').select2({
width: 'element',
allowClear: true
});
});
</script>
{% endblock %}
{% block content_list %}
{{ form.errors }}
@ -51,62 +66,6 @@
</div>
</div>
<div class="mf-stat-item">
<hr/>
<div class="mf-line mf-prod">
<label class="h3">Статистика за</label>
<div class="mf-field">
<div class="mf-year">
{{ form.statistic_year }}
</div>
<div class="mf-stat-data">
<div class="sd-visitors">
{{ form.visitors }}
</div>
<div class="sd-participants">
{{ form.partisipants }}
</div>
<div class="sd-area">
{{ form.square }}
м²
</div>
</div>
</div>
</div>
<div class="mf-line mf-prod mf-stat-countries">
<label>Страны:</label>
<div class="mf-field">
<div class="csb-selected-items"></div>
<div class="csb-menu-wrap">
<div class="scroll-container csb-menu">
<div class="scroll-content clearfix">
{{ form.countries }}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="mf-stat-add-button">
<a class="button big icon-add" href="#">добавить данные за другой период</a>
</div>
</div>
<hr/>
<h2>Стоимость посещения и участия</h2>

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
from django import forms
from theme.models import Theme, Tag
from theme.models import Theme
from place_exposition.models import PlaceExposition
from city.models import City
from country.models import Country
from multiupload.fields import MultiFileField, MultiFileInput
@ -25,19 +24,19 @@ class ExpoForm1(forms.Form):
date_start = forms.DateField(widget=forms.TextInput(attrs={'class':'data dateFrom', 'placeholder':'дд.мм.гг'}))
date_end = forms.DateField(widget=forms.TextInput(attrs={'class':'data dateTo','placeholder':'дд.мм.гг'}))
country = forms.ChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()])
theme = forms.MultipleChoiceField(label='Тематики', choices=[(item.id, item.name) for item in Theme.objects.language().all()])
place = forms.ChoiceField(label=u'Место проведения', required=False, choices=places)
city = forms.CharField(label=u'Город', widget=forms.HiddenInput())
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
country = forms.ChoiceField(label=u'Страна', choices=[(c.id, c.name) for c in Country.objects.all()], widget=forms.Select(attrs={'id':'id_country'}))
theme = forms.MultipleChoiceField(label='Тематики', choices=[(item.id, item.name) for item in Theme.objects.language().all()], widget=forms.SelectMultiple(attrs={'id':'id_theme'}))
place = forms.ChoiceField(label=u'Место проведения', required=False, choices=places, widget=forms.Select(attrs={'id':'id_place'}))
city = forms.CharField(label=u'Город', widget=forms.HiddenInput(attrs={'id':'id_city'}))
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(attrs={'id':'id_tag'}), required=False)
audience1 = forms.BooleanField(required=False)
audience2 = forms.BooleanField(required=False)
audience3 = forms.BooleanField(required=False)
periodic = forms.ChoiceField(choices=choices, required=False, widget=forms.Select(attrs={'placeholder':u'Периодичность'}))
membership1= forms.BooleanField(required=False)
membership2= forms.BooleanField(required=False)
membership3= forms.BooleanField(required=False)
periodic = forms.ChoiceField(choices=choices, required=False)
membership1 = forms.BooleanField(required=False)
membership2 = forms.BooleanField(required=False)
membership3 = forms.BooleanField(required=False)
web_site = forms.URLField(required=False, widget=forms.TextInput(attrs={'placeholder': "Веб-сайт (необязательно)"}))
products = forms.CharField(widget=forms.Textarea(attrs={'placeholder': "Экспонируемые продукты", 'cols':30, 'rows':10}))
time_start = forms.TimeField()
@ -50,12 +49,6 @@ class ExpoForm2(forms.Form):
statistics
"""
found_year = forms.IntegerField()
statistic_year = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'введите год'}))
visitors = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'количество посетителей'}))
partisipants = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'количество учасников'}))
square = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'площадь'}))
countries = forms.ModelChoiceField(queryset=Country.objects.filter(id=50))
# ticket price
pre_one_day = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на один день'}))
pre_all_days = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на все дни'}))
@ -72,9 +65,11 @@ class ExpoForm2(forms.Form):
class ExpoForm3(forms.Form):
attachments = MultiFileField(min_num=0, max_num=2, max_file_size=1024*1024*5, widget=MultiFileInput(
attrs={'class':'button big icon-camera', 'value':u'выберите фотографии', 'id':'files'}
"""
photos from last expositions
"""
attachments = MultiFileField(min_num=0, max_num=6, max_file_size=1024*1024*5, widget=MultiFileInput(
attrs={'class':'button big icon-camera', 'value': u'выберите фотографии', 'id': 'files'}
))
formlist = [ExpoForm1, ExpoForm2, ExpoForm3]

@ -1,8 +1,7 @@
from django.conf.urls import patterns, url, include
from django.conf.urls import patterns, url
from .views import ExpoWizard
from .forms import ExpoForm1, ExpoForm2,ExpoForm3
from wizard.views import wizard_view
formlist = [ExpoForm1,ExpoForm2, ExpoForm3]
urlpatterns = patterns('',
# url(r'^ajax/$', 'wizard.views.ajax_view'),
url(r'^$', wizard_view)
)
urlpatterns = patterns('', url(r'^$', ExpoWizard.as_view(formlist), name = 'add_exposition'))

@ -1,13 +1,27 @@
from django.contrib.formtools.wizard.views import SessionWizardView
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, HttpResponseForbidden
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.core.exceptions import PermissionDenied
import os
from photologue.models import Photo
from exposition.models import Exposition, Statistic
from exposition.models import Exposition
from functions.form_check import translit_with_separator
from accounts.models import User
from country.models import Country
from city.models import City
from place_exposition.models import PlaceExposition
from theme.models import Tag, Theme
class LoginRequiredMixin(object):
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
if not request.user.organiser:
raise PermissionDenied
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
# defining different template for every form
@ -17,14 +31,15 @@ TEMPLATES = {
'2': 'client/wizard/third_step.html'
}
class ExpoWizard(SessionWizardView):
"main view that handle all data from 3 forms(steps) and finally create an Exposition"
class ExpoWizard(LoginRequiredMixin, SessionWizardView):
"""main view that handle all data from 3 forms(steps) and finally create an Exposition"""
# storing temporary files during upload
location = os.path.join(settings.MEDIA_ROOT, 'temp')
file_storage = FileSystemStorage(location, settings.MEDIA_URL)
SUCCES_URL = "/"
SUCCESS_URL = "/"
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
@ -36,16 +51,19 @@ class ExpoWizard(SessionWizardView):
data = self.get_all_cleaned_data()
# creating new exposition
expo = Exposition.objects.language(self.request.LANGUAGE_CODE).create(
lang = self.request.LANGUAGE_CODE
expo = Exposition.objects.language(lang).create(
name=data.get('name'),
data_begin=data.get('date_start'),
data_end=data.get('date_end'),
main_title=data.get('main_title'),
description=data.get('description'),
products=data.get('products'),
country=data.get('country', 1),
city=data.get('city', 1),
place=data.get('place', 1),
country=Country.objects.language(lang).get(id=data.get('country')),
city=City.objects.language(lang).get(id=data.get('city')),
place=PlaceExposition.objects.language(lang).get(id=data.get('place')),
periodic=data.get('periodic'),
web_page=data.get('web_site'),
logo=data.get('logo'),
@ -66,7 +84,7 @@ class ExpoWizard(SessionWizardView):
url=translit_with_separator(data.get('name')),
quality_label=0,
audience=0,
creator = User.objects.get(id=self.request.user.id)
creator=User.objects.get(id=self.request.user.id)
)
# adding photo to gallery
photos = []
@ -78,24 +96,13 @@ class ExpoWizard(SessionWizardView):
for photo in photos:
expo.upload_photo(photo)
# many to many relations saving
expo.tag = [data.get('tag')]
expo.theme = [data.get('theme')]
expo.tag = Tag.objects.language(lang).filter(id__in=data.get('tag').split(','))
expo.theme = Theme.objects.language(lang).filter(id__in=data.get('theme'))
# setting bit fields audience and quality_label
self.set_flags(expo, data)
expo.save()
# ?
Statistic.objects.language(self.request.LANGUAGE_CODE).create(
exposition=expo,
year=data.get('statistic_year'),
visitors=data.get('visitors'),
members=data.get('partisipants'),
countries=data.get('countries'),
area=data.get('square')
)
# remove temporary files if it has any
if upload_logo:
self.file_storage.delete(upload_logo.name)
@ -103,11 +110,10 @@ class ExpoWizard(SessionWizardView):
for f in upload_images:
self.file_storage.delete(f.name)
return HttpResponseRedirect(self.SUCCES_URL)
return HttpResponseRedirect(self.SUCCESS_URL)
def set_flags(self, expo, data):
@staticmethod
def set_flags(expo, data):
if data['membership1']:
expo.quality_label = (expo.quality_label | Exposition.quality_label.exporating)
if data['membership2']:
@ -122,5 +128,4 @@ class ExpoWizard(SessionWizardView):
if data['audience3']:
expo.audience = expo.audience | (getattr(Exposition.audience, 'general public'))
from wizard.forms import formlist
wizard_view = ExpoWizard.as_view(formlist)

Loading…
Cancel
Save