From 3b2fd70e5b1131b9e691b175c8ab7fd9a89dbca6 Mon Sep 17 00:00:00 2001 From: Ivan Kovalkovskyi Date: Wed, 2 Sep 2015 15:35:54 +0300 Subject: [PATCH] minor bug fix --- exposition/models.py | 2 + meta/admin.py | 12 ++--- meta/admin_urls.py | 11 ++-- meta/forms.py | 10 ++-- meta/models.py | 7 ++- meta/views.py | 10 ++-- proj/views.py | 2 + templates/client/includes/seo_text.html | 2 +- wizard/models.py | 8 --- wizard/urls.py | 2 +- wizard/views.py | 69 +++++++++++++------------ 11 files changed, 60 insertions(+), 75 deletions(-) diff --git a/exposition/models.py b/exposition/models.py index dce42537..950c36f8 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -59,6 +59,8 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): data_end = models.DateField(verbose_name='Дата окончания') services = BitField(flags=flags) # relations + creator = models.ForeignKey('accounts.User', verbose_name=u'Создатель', on_delete=models.SET_NULL, + related_name='exposition_creator', blank=True, null=True) country = models.ForeignKey('country.Country', verbose_name='Страна', on_delete=models.PROTECT, related_name='exposition_country') city = models.ForeignKey('city.City', verbose_name='Город', on_delete=models.PROTECT, diff --git a/meta/admin.py b/meta/admin.py index 5d944cd3..7f21eb6b 100644 --- a/meta/admin.py +++ b/meta/admin.py @@ -1,13 +1,7 @@ # -*- 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.http import HttpResponseRedirect from django.conf import settings -from django.forms.formsets import BaseFormSet, formset_factory -from django.forms.models import modelformset_factory -from django.contrib.contenttypes.models import ContentType -from django.contrib.auth.decorators import login_required -#models and forms +# models and forms from models import MetaSetting from forms import MetaForm, MetaFilterForm from functions.admin_views import AdminListView, AdminView @@ -45,7 +39,7 @@ class MetaView(AdminView): data['keywords_%s' % code] = trans_obj.keywords data['h1_%s' % code] = trans_obj.h1 - form =form_class(initial=data) + form = form_class(initial=data) return form else: return form_class() diff --git a/meta/admin_urls.py b/meta/admin_urls.py index a545ff76..f93ae2c7 100644 --- a/meta/admin_urls.py +++ b/meta/admin_urls.py @@ -1,16 +1,15 @@ # -*- coding: utf-8 -*- -from django.conf.urls import patterns, include, url -from admin import MetaListView, MetaView -from .views import CreateSeoText, SeoTextList, EditSeoText, DeleteSeoText +from django.conf.urls import patterns, url +from views import CreateSeoText, SeoTextList, EditSeoText, DeleteSeoText +from .admin import MetaListView, MetaView -urlpatterns = patterns('conference.admin', +urlpatterns = patterns('', url(r'^seo/new/$', CreateSeoText.as_view(), name='seo_new'), url(r'^seo/all/$', SeoTextList.as_view(), name='seo_all'), url(r'^seo/edit/(?P\d{1,5})/$', EditSeoText.as_view(), name='seo_edit'), url(r'^seo/delete/(?P\d{1,5})/$', DeleteSeoText.as_view(), name='seo_delete'), url(r'^all/$', MetaListView.as_view()), - #url(r'^change/(?P.*)/$', 'conference_change'), - url(r'^(?P.*)/$', MetaView.as_view()), + url(r'^(?P\d{1,6})/$', MetaView.as_view()), url(r'^$', MetaView.as_view()), ) \ No newline at end of file diff --git a/meta/forms.py b/meta/forms.py index eb93f28a..641845f4 100644 --- a/meta/forms.py +++ b/meta/forms.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- from django import forms from django.conf import settings -from models import MetaSetting +from models import MetaSetting, SeoText from functions.translate import fill_with_signal from functions.admin_forms import AdminFilterForm +from ckeditor.widgets import CKEditorWidget +from hvad.forms import TranslatableModelForm class MetaForm(forms.Form): @@ -14,7 +16,7 @@ class MetaForm(forms.Form): create dynamical translated fields fields """ super(MetaForm, self).__init__(*args, **kwargs) - #creates translated forms example: name_ru, name_en + # creates translated forms example: name_ru, name_en # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs if len(settings.LANGUAGES) in range(10): for lid, (code, name) in enumerate(settings.LANGUAGES): @@ -48,10 +50,6 @@ class MetaFilterForm(AdminFilterForm): model = MetaSetting -from .models import SeoText -from ckeditor.widgets import CKEditorWidget -from hvad.forms import TranslatableModelForm - class SeoTextForm(TranslatableModelForm): class Meta: diff --git a/meta/models.py b/meta/models.py index 101545b2..504207f9 100644 --- a/meta/models.py +++ b/meta/models.py @@ -135,13 +135,12 @@ class SeoTextManager(TranslationManager): key = 'seo_text_cache' result = cache.get(key) if result: - return result.get(lang+'_' + url) + return result.get("%s_%s" % (lang, url)) qs = SeoText.objects.language('all') - value_dict = {obj.language_code+'_'+obj.url:obj for obj in qs} + value_dict = {obj.language_code+'_'+obj.url: obj for obj in qs} cache.set(key, value_dict, self.cache_time) - return value_dict.get(lang+'_'+url) - + return value_dict.get("%s_%s" % (lang, url)) class SeoText(TranslatableModel): diff --git a/meta/views.py b/meta/views.py index 28d30eba..f8639343 100644 --- a/meta/views.py +++ b/meta/views.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals - +from . import settings +from django.views.generic import CreateView, UpdateView, DeleteView, ListView from django.core.exceptions import ImproperlyConfigured from models import MetaSetting - -from . import settings +from .forms import SeoTextForm, SeoText class Meta(object): @@ -189,10 +189,6 @@ class MetadataMixin(object): return context -from django.views.generic import CreateView, UpdateView, DeleteView, ListView -from .models import SeoText -from .forms import SeoTextForm - class CreateSeoText(CreateView): form_class = SeoTextForm diff --git a/proj/views.py b/proj/views.py index 0db0e5bd..da14db80 100644 --- a/proj/views.py +++ b/proj/views.py @@ -26,6 +26,7 @@ def clear_slashes(str_): str_ = str_[:-1] return str_ + def add_seo(request): url = request.path lang = get_language() @@ -38,6 +39,7 @@ def add_seo(request): seo_text = None return seo_text + def expo_context(request): banners_themes = [24, 34, 4] banner_tags = [141, 142, 143, 156, 206, 231, 232, 390, 391, 400, 457, 500, 536, 537, 539, 457, 500, 686, 715, 765, diff --git a/templates/client/includes/seo_text.html b/templates/client/includes/seo_text.html index 46773696..833c8d87 100644 --- a/templates/client/includes/seo_text.html +++ b/templates/client/includes/seo_text.html @@ -1,3 +1,3 @@ -
+

{{ object.title }}

{{ object.body|safe }}
\ No newline at end of file diff --git a/wizard/models.py b/wizard/models.py index 74b18b8a..e69de29b 100644 --- a/wizard/models.py +++ b/wizard/models.py @@ -1,8 +0,0 @@ -from django.db import models -from django.conf import settings -import os -# Create your models here. - - -class Attachment(models.Model): - file = models.FileField(upload_to=os.path.join(settings.MEDIA_ROOT,'attachments_files')) \ No newline at end of file diff --git a/wizard/urls.py b/wizard/urls.py index 6bd3e9eb..4ae424d2 100644 --- a/wizard/urls.py +++ b/wizard/urls.py @@ -3,6 +3,6 @@ from django.conf.urls import patterns, url, include from wizard.views import wizard_view urlpatterns = patterns('', - url(r'^ajax/$', 'wizard.views.ajax_view'), + # url(r'^ajax/$', 'wizard.views.ajax_view'), url(r'^$', wizard_view) ) \ No newline at end of file diff --git a/wizard/views.py b/wizard/views.py index df29d8f8..9a9b21ea 100644 --- a/wizard/views.py +++ b/wizard/views.py @@ -4,10 +4,10 @@ from django.http import HttpResponseRedirect from django.conf import settings import os -from photologue.models import Photo, Gallery +from photologue.models import Photo from exposition.models import Exposition, Statistic -from wizard.models import Attachment from functions.form_check import translit_with_separator +from accounts.models import User # defining different template for every form @@ -16,20 +16,26 @@ TEMPLATES = { '1': 'client/wizard/second_step.html', '2': 'client/wizard/third_step.html' } -post = None -files = None -# main view that handle all data from 3 forms(steps) and finally create an Exposition class ExpoWizard(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 = "/" + + def get_template_names(self): + return [TEMPLATES[self.steps.current]] def done(self, form_list, **kwargs): + # getting data and files upload_logo = form_list[0].cleaned_data.get('logo') upload_images = self.request.FILES.getlist(u'2-attachments') data = self.get_all_cleaned_data() - + + # creating new exposition expo = Exposition.objects.language(self.request.LANGUAGE_CODE).create( name=data.get('name'), data_begin=data.get('date_start'), @@ -59,9 +65,10 @@ class ExpoWizard(SessionWizardView): min_closed_equipped_area=data.get('equiped'), url=translit_with_separator(data.get('name')), quality_label=0, - audience=0 + audience=0, + creator = User.objects.get(id=self.request.user.id) ) - + # adding photo to gallery photos = [] for i, photo in enumerate(upload_images): photos.append(Photo.objects.language(self.request.LANGUAGE_CODE).create( @@ -71,25 +78,16 @@ 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')] - if data['membership1']: - expo.quality_label = (expo.quality_label | Exposition.quality_label.exporating) - if data['membership2']: - expo.quality_label = (expo.quality_label | Exposition.quality_label.rsva) - if data['membership3']: - expo.quality_label = (expo.quality_label | Exposition.quality_label.ufi) - - if data['audience1']: - expo.audience = (expo.audience | Exposition.audience.experts) - if data['audience2']: - expo.audience = expo.audience | getattr(Exposition.audience, 'experts and consumers') - if data['audience3']: - expo.audience = expo.audience | (getattr(Exposition.audience, 'general public')) + # setting bit fields audience and quality_label + self.set_flags(expo, data) expo.save() - Statistic.objects.language().create( + # ? + Statistic.objects.language(self.request.LANGUAGE_CODE).create( exposition=expo, year=data.get('statistic_year'), visitors=data.get('visitors'), @@ -98,26 +96,31 @@ class ExpoWizard(SessionWizardView): area=data.get('square') ) + # remove temporary files if it has any if upload_logo: self.file_storage.delete(upload_logo.name) if upload_images: for f in upload_images: self.file_storage.delete(f.name) - return HttpResponseRedirect('/') - def get_template_names(self): - return [TEMPLATES[self.steps.current]] + return HttpResponseRedirect(self.SUCCES_URL) + def set_flags(self, expo, data): + if data['membership1']: + expo.quality_label = (expo.quality_label | Exposition.quality_label.exporating) + if data['membership2']: + expo.quality_label = (expo.quality_label | Exposition.quality_label.rsva) + if data['membership3']: + expo.quality_label = (expo.quality_label | Exposition.quality_label.ufi) + + if data['audience1']: + expo.audience = (expo.audience | Exposition.audience.experts) + if data['audience2']: + expo.audience = expo.audience | getattr(Exposition.audience, 'experts and consumers') + if data['audience3']: + expo.audience = expo.audience | (getattr(Exposition.audience, 'general public')) from wizard.forms import formlist wizard_view = ExpoWizard.as_view(formlist) - -from django.contrib.formtools.wizard.storage.session import SessionStorage -from django.http import HttpResponse -import json - -def ajax_view(request): - form = formlist[2](post, files, prefix='2') - return HttpResponse(json.dumps({'posts':post,'files':files}), content_type='application/json')