Check url right. Change bitfield relation. Some changes in service template

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent 3551ba563d
commit b8df218b79
  1. 18
      article/forms.py
  2. 6
      article/views.py
  3. 14
      city/forms.py
  4. 6
      city/views.py
  5. 17
      conference/forms.py
  6. 14
      country/forms.py
  7. 23
      country/models.py
  8. 6
      country/views.py
  9. 10
      exposition/forms.py
  10. 15
      news/forms.py
  11. 6
      news/views.py
  12. 14
      place_conference/forms.py
  13. 4
      place_conference/views.py
  14. 8
      place_exposition/forms.py
  15. 4
      place_exposition/views.py
  16. 10
      seminar/forms.py
  17. 65
      service/forms.py
  18. 47
      service/templates/service_add.html
  19. 4
      service/templates/service_all.html
  20. 6
      service/urls.py
  21. 22
      service/views.py
  22. 10
      webinar/forms.py

@ -101,20 +101,10 @@ class ArticleForm(forms.Form):
cleaned_data = super(ArticleForm, self).clean() cleaned_data = super(ArticleForm, self).clean()
main_title_ru = cleaned_data.get('main_title_ru') main_title_ru = cleaned_data.get('main_title_ru')
try: try:
Article.objects.get(url=translit_with_separator(main_title_ru)) article = Article.objects.get(url=translit_with_separator(main_title_ru))
if (article.url == translit_with_separator(main_title_ru)):
return main_title_ru
except: except:
return main_title_ru return main_title_ru
raise ValidationError('Статья с таким названием уже существует') raise ValidationError('Статья с таким названием уже существует')
class ArticleChangeForm(ArticleForm):
"""
cancel checking url field
"""
def clean_main_title_ru(self):
"""
check main title which must be unique because it generate slug field
"""
cleaned_data = super(ArticleForm, self).clean()
main_title_ru = cleaned_data.get('main_title_ru')
return main_title_ru

@ -6,7 +6,7 @@ from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
#models and forms #models and forms
from forms import ArticleForm, Article, ArticleChangeForm from forms import ArticleForm, Article
from theme.models import Tag from theme.models import Tag
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm from file.forms import FileModelForm
@ -46,7 +46,7 @@ def article_change(request, url):
return HttpResponseRedirect('/article/all') return HttpResponseRedirect('/article/all')
if request.POST: if request.POST:
form = ArticleChangeForm(request.POST) form = ArticleForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
@ -69,7 +69,7 @@ def article_change(request, url):
data['keywords_%s' % code] = obj.keywords data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions data['descriptions_%s' % code] = obj.descriptions
#fill form #fill form
form = ArticleChangeForm(initial=data) form = ArticleForm(initial=data)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]

@ -110,7 +110,9 @@ class CityForm(forms.Form):
cleaned_data = super(CityForm, self).clean() cleaned_data = super(CityForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
City.objects.get(url=translit_with_separator(name_ru)) city = City.objects.get(url=translit_with_separator(name_ru))
if(city.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -140,12 +142,4 @@ class CityForm(forms.Form):
""" """
cleaned_data = super(CityForm, self).clean() cleaned_data = super(CityForm, self).clean()
population = cleaned_data.get('population').strip() population = cleaned_data.get('population').strip()
return is_positive_integer(population) return is_positive_integer(population)
class CityChangeForm(CityForm):
"""
cancel name checking
"""
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru

@ -6,7 +6,7 @@ from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
#models and forms #models and forms
from forms import CityForm, CityChangeForm from forms import CityForm
from models import City from models import City
from file.models import FileModel from file.models import FileModel
from file.forms import FileModelForm from file.forms import FileModelForm
@ -45,7 +45,7 @@ def city_change(request, url):
return HttpResponseRedirect('/city/all') return HttpResponseRedirect('/city/all')
if request.POST: if request.POST:
form = CityChangeForm(request.POST) form = CityForm(request.POST)
if form.is_valid(): if form.is_valid():
form.save(city_id) form.save(city_id)
return HttpResponseRedirect('/city/all') return HttpResponseRedirect('/city/all')
@ -72,7 +72,7 @@ def city_change(request, url):
data['keywords_%s' % code] = obj.keywords data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions data['descriptions_%s' % code] = obj.descriptions
#fill form #fill form
form = CityChangeForm(initial=data) form = CityForm(initial=data)
args = {} args = {}

@ -160,7 +160,9 @@ class ConferenceCreateForm(forms.Form):
cleaned_data = super(ConferenceCreateForm, self).clean() cleaned_data = super(ConferenceCreateForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
Conference.objects.get(url=translit_with_separator(name_ru)) conference = Conference.objects.get(url=translit_with_separator(name_ru))
if (conference.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -225,9 +227,6 @@ class ConferenceCreateForm(forms.Form):
return is_positive_integer(max_price) return is_positive_integer(max_price)
class ConferenceChangeForm(ConferenceCreateForm): class ConferenceChangeForm(ConferenceCreateForm):
""" """
@ -239,12 +238,6 @@ class ConferenceChangeForm(ConferenceCreateForm):
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False)
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru
class TimeTableForm(forms.Form): class TimeTableForm(forms.Form):
""" """
Create TimeTable form Create TimeTable form
@ -269,6 +262,4 @@ class TimeTableForm(forms.Form):
self.fields['name_%s' % code] = forms.CharField(label='Название', required=required) self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
def save(self, id=None): def save(self, id=None):
pass pass

@ -6,7 +6,6 @@ from django.core.exceptions import ValidationError
#models #models
from models import Country, City from models import Country, City
from directories.models import Language, Currency, Iata from directories.models import Language, Currency, Iata
from file.models import FileModel, TmpFile
#functions #functions
from functions.translate import populate_all, fill_trans_fields_all from functions.translate import populate_all, fill_trans_fields_all
from functions.files import check_tmp_files from functions.files import check_tmp_files
@ -54,6 +53,8 @@ class CountryForm(forms.Form):
time_delivery = forms.CharField(label='Срок выдачи', required=False, time_delivery = forms.CharField(label='Срок выдачи', required=False,
widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'})) widget=forms.TextInput(attrs={'placeholder':'Срок выдачи'}))
region = forms.ChoiceField(label='Регион', choices=((item, item) for item in Country.REGIONS)) region = forms.ChoiceField(label='Регион', choices=((item, item) for item in Country.REGIONS))
#services = forms.MultipleChoiceField(label='Сервисы', required=False, choices=);
#field for comparing tmp files #field for comparing tmp files
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
@ -169,7 +170,10 @@ class CountryForm(forms.Form):
cleaned_data = super(CountryForm, self).clean() cleaned_data = super(CountryForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
Country.objects.get(url=translit_with_separator(name_ru)) country = Country.objects.get(url=translit_with_separator(name_ru))
if (country.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -222,9 +226,3 @@ class CountryForm(forms.Form):
cleaned_data = super(CountryForm, self).clean() cleaned_data = super(CountryForm, self).clean()
time_delivery = cleaned_data.get('time_delivery').strip() time_delivery = cleaned_data.get('time_delivery').strip()
return is_positive_integer(time_delivery) return is_positive_integer(time_delivery)
class CountryChangeForm(CountryForm):
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru

@ -19,27 +19,25 @@ class Country(TranslatableModel):
""" """
flags = [] flags = []
try: ids = [str(item.id) for item in Service.objects.all() ]
ids = [item.id for item in Service.objects.all() ] #max = sorted(ids)[-1]
max = sorted(ids)[-1] #for i in range(max):
for i in range(max): # flags.append(str(i))
flags.append(str(i))
except: pass
services = BitField(flags=flags) services = BitField(flags=ids)
REGIONS =('europa', 'asia', 'america', 'africa') REGIONS =('europa', 'asia', 'america', 'africa')
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
capital = models.ForeignKey(City, null=True, related_name='capital') capital = models.ForeignKey(City,blank=True, null=True, related_name='capital')
population = models.PositiveIntegerField(blank=True, null=True) population = models.PositiveIntegerField(blank=True, null=True)
teritory = models.PositiveIntegerField(blank=True, null=True) teritory = models.PositiveIntegerField(blank=True, null=True)
timezone = models.FloatField(blank=True, null=True) timezone = models.FloatField(blank=True, null=True)
phone_code = models.PositiveIntegerField(blank=True, null=True) phone_code = models.PositiveIntegerField(blank=True, null=True)
big_cities = models.ManyToManyField(City, null=True, related_name='cities') big_cities = models.ManyToManyField(City, blank=True, null=True, related_name='cities')
language = models.ManyToManyField(Language, null=True) language = models.ManyToManyField(Language, blank=True, null=True)
currency = models.ManyToManyField(Currency, null=True) currency = models.ManyToManyField(Currency, blank=True, null=True)
time_delivery = models.PositiveSmallIntegerField(blank=True, null=True) time_delivery = models.PositiveSmallIntegerField(blank=True, null=True)
# #
region = EnumField(values=REGIONS) region = EnumField(values=REGIONS)
@ -65,5 +63,4 @@ class Country(TranslatableModel):
) )
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk)) return self.lazy_translation_getter('name', unicode(self.pk))

@ -9,7 +9,7 @@ from django.db.models.loading import get_model
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
#models and forms #models and forms
from models import Country from models import Country
from forms import CountryForm, CountryChangeForm from forms import CountryForm
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm from file.forms import FileModelForm
#custom views #custom views
@ -50,7 +50,7 @@ def country_change(request, url):
if request.POST: if request.POST:
#country_id sending for saving capital field in __init__ #country_id sending for saving capital field in __init__
form = CountryChangeForm(request.POST, country_id=country_id) form = CountryForm(request.POST, country_id=country_id)
if form.is_valid(): if form.is_valid():
form.save(country_id) form.save(country_id)
@ -81,7 +81,7 @@ def country_change(request, url):
data['currency'] = [item.id for item in c.currency.all()] data['currency'] = [item.id for item in c.currency.all()]
#initial forms #initial forms
#country_id sending for initialing capital field in __init__ #country_id sending for initialing capital field in __init__
form = CountryChangeForm(initial=data, country_id = c.id) form = CountryForm(initial=data, country_id = c.id)
args = {} args = {}

@ -172,7 +172,9 @@ class ExpositionCreateForm(forms.Form):
cleaned_data = super(ExpositionCreateForm, self).clean() cleaned_data = super(ExpositionCreateForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
Exposition.objects.get(url=translit_with_separator(name_ru)) exposition = Exposition.objects.get(url=translit_with_separator(name_ru))
if (exposition.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -279,12 +281,6 @@ class ExpositionChangeForm(ExpositionCreateForm):
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False)
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru
class TimeTableForm(forms.Form): class TimeTableForm(forms.Form):
begin = forms.DateTimeField(label='Время начала', widget=forms.TextInput(attrs={'style':'width: 150px'})) begin = forms.DateTimeField(label='Время начала', widget=forms.TextInput(attrs={'style':'width: 150px'}))

@ -124,7 +124,9 @@ class NewsForm(forms.Form):
cleaned_data = super(NewsForm, self).clean() cleaned_data = super(NewsForm, self).clean()
main_title_ru = cleaned_data.get('main_title_ru') main_title_ru = cleaned_data.get('main_title_ru')
try: try:
News.objects.get(url=translit_with_separator(main_title_ru)) news = News.objects.get(url=translit_with_separator(main_title_ru))
if (news.url == translit_with_separator(main_title_ru)):
return main_title_ru
except: except:
return main_title_ru return main_title_ru
@ -140,13 +142,4 @@ class NewsForm(forms.Form):
if not event_id and event: if not event_id and event:
raise ValidationError('Вы должны выбрать тип события') raise ValidationError('Вы должны выбрать тип события')
else: else:
return event_id return event_id
class NewsChangeForm(NewsForm):
"""
cancel checking url
"""
def clean_main_title_ru(self):
cleaned_data = super(NewsForm, self).clean()
main_title_ru = cleaned_data.get('main_title_ru')
return main_title_ru

@ -9,7 +9,7 @@ from django.db.models.loading import get_model
import json import json
#model and forms #model and forms
from models import News from models import News
from news.forms import NewsForm, NewsChangeForm from news.forms import NewsForm
from exposition.models import Exposition from exposition.models import Exposition
from conference.models import Conference from conference.models import Conference
from theme.models import Tag from theme.models import Tag
@ -84,7 +84,7 @@ def news_change(request, url):
return HttpResponseRedirect('/news/all') return HttpResponseRedirect('/news/all')
if request.POST: if request.POST:
form = NewsChangeForm(request.POST) form = NewsForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()]
@ -125,7 +125,7 @@ def news_change(request, url):
data['keywords_%s' % code] = obj.keywords data['keywords_%s' % code] = obj.keywords
data['descriptions_%s' % code] = obj.descriptions data['descriptions_%s' % code] = obj.descriptions
form = NewsChangeForm(initial=data) form = NewsForm(initial=data)
#set choices filled by ajax #set choices filled by ajax
form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])] form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.filter(theme__in=data['theme'])]
if data.get('event'): if data.get('event'):

@ -157,12 +157,14 @@ class ConferenceForm(forms.Form):
""" """
check name which must be unique because it generate slug field check name which must be unique because it generate slug field
""" """
#cleaned_data = super(ConferenceForm, self).clean()
name_ru = self.cleaned_data.get('name_ru') name_ru = self.cleaned_data.get('name_ru')
try: try:
PlaceConference.objects.get(url=translit_with_separator(name_ru)) place_conference = PlaceConference.objects.get(url=translit_with_separator(name_ru))
except PlaceConference.DoesNotExist: if (place_conference.url == translit_with_separator(name_ru)):
return name_ru
except:
return name_ru return name_ru
raise ValidationError('Место проведения с таким названием уже существует') raise ValidationError('Место проведения с таким названием уже существует')
@ -259,12 +261,6 @@ class ConferenceForm(forms.Form):
return is_positive_integer(exp_hall_area) return is_positive_integer(exp_hall_area)
class ConferenceChangeForm(ConferenceForm):
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru
class HallForm(forms.ModelForm): class HallForm(forms.ModelForm):
""" """
form for Hall model form for Hall model

@ -97,7 +97,7 @@ def conference_change(request, url):
if request.POST: if request.POST:
#formset of HallForm #formset of HallForm
HallFormSet = formset_factory(HallForm) HallFormSet = formset_factory(HallForm)
form = ConferenceChangeForm(request.POST) form = ConferenceForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])]
formset = HallFormSet(request.POST) formset = HallFormSet(request.POST)
@ -141,7 +141,7 @@ def conference_change(request, url):
data['keywords_%s'%code] = obj.keywords data['keywords_%s'%code] = obj.keywords
data['descriptions_%s'%code] = obj.descriptions data['descriptions_%s'%code] = obj.descriptions
form = ConferenceChangeForm(initial=data) form = ConferenceForm(initial=data)
#set choices filled by ajax #set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
#get existing halls #get existing halls

@ -167,7 +167,9 @@ class ExpositionForm(forms.Form):
cleaned_data = super(ExpositionForm, self).clean() cleaned_data = super(ExpositionForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
PlaceExposition.objects.get(url=translit_with_separator(name_ru)) place_exposittion = PlaceExposition.objects.get(url=translit_with_separator(name_ru))
if(place_exposittion.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -292,10 +294,6 @@ class ExpositionForm(forms.Form):
total_halls = cleaned_data.get('total_halls').strip() total_halls = cleaned_data.get('total_halls').strip()
return is_positive_integer(total_halls) return is_positive_integer(total_halls)
class ExpositionChangeForm(ExpositionForm):
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru
class HallForm(forms.ModelForm): class HallForm(forms.ModelForm):
""" """

@ -98,7 +98,7 @@ def exposition_change(request, url):
if request.POST: if request.POST:
#formset of HallForm #formset of HallForm
HallFormSet = formset_factory(HallForm) HallFormSet = formset_factory(HallForm)
form = ExpositionChangeForm(request.POST) form = ExpositionForm(request.POST)
#set choices filled by ajax #set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=request.POST['country'])]
formset = HallFormSet(request.POST) formset = HallFormSet(request.POST)
@ -145,7 +145,7 @@ def exposition_change(request, url):
data['keywords_%s'%code] = obj.keywords data['keywords_%s'%code] = obj.keywords
data['descriptions_%s'%code] = obj.descriptions data['descriptions_%s'%code] = obj.descriptions
form = ExpositionChangeForm(initial=data) form = ExpositionForm(initial=data)
#set choices filled by ajax #set choices filled by ajax
form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])] form.fields['city'].choices = [(item.id, item.name) for item in City.objects.filter(country=data['country'])]
#get existing halls #get existing halls

@ -150,7 +150,9 @@ class SeminarCreateForm(forms.Form):
cleaned_data = super(SeminarCreateForm, self).clean() cleaned_data = super(SeminarCreateForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
Seminar.objects.get(url=translit_with_separator(name_ru)) seminar = Seminar.objects.get(url=translit_with_separator(name_ru))
if(seminar.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -221,8 +223,4 @@ class SeminarChangeForm(SeminarCreateForm):
""" """
organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False)
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru

@ -1,24 +1,38 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db.models import F
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all from functions.translate import populate_all, fill_trans_fields_all
#models #models
from models import Review, Service from models import Review, Service
from country.models import Country, City from country.models import Country, City
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
class ServiceForm(forms.Form): class ServiceForm(forms.Form):
countries = [(item.id, item.name) for item in Country.objects.all()]
cities = [(item.id, item.name) for item in City.objects.all()] europa = forms.ModelMultipleChoiceField(queryset=Country.objects.filter(region='europa'), required=False,
country = forms.MultipleChoiceField(choices=countries) widget=forms.CheckboxSelectMultiple())
city = forms.MultipleChoiceField(choices=cities) asia = forms.ModelMultipleChoiceField(queryset=Country.objects.filter(region='asia'), required=False,
widget=forms.CheckboxSelectMultiple())
america = forms.ModelMultipleChoiceField(queryset=Country.objects.filter(region='america'),required=False,
widget=forms.CheckboxSelectMultiple())
africa = forms.ModelMultipleChoiceField(queryset=Country.objects.filter(region='africa'),required=False,
widget=forms.CheckboxSelectMultiple())
# city = forms.MultipleChoiceField(choices=cities)
url = forms.CharField(label='url', required=False)
price = forms.CharField(label='Цена', required=False, price = forms.CharField(label='Цена', required=False,
widget=forms.TextInput(attrs={'placeholder':'Цена'})) widget=forms.TextInput(attrs={'placeholder':'Цена'}))
currency_list = [('USD','USD'), ('EUR','EUR'), ('RUB','RUB')] currency_list = [('USD','USD'), ('EUR','EUR'), ('RUB','RUB')]
currency = forms.ChoiceField(choices=currency_list) currency = forms.ChoiceField(choices=currency_list)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ServiceForm, self).__init__(*args, **kwargs) super(ServiceForm, self).__init__(*args, **kwargs)
# creates translated form fields, example: name_ru, name_en # creates translated form fields, example: name_ru, name_en
@ -44,7 +58,7 @@ class ServiceForm(forms.Form):
def save(self, id=None): def save(self, id=None):
data = self.cleaned_data data = self.cleaned_data
#create new Tag object or get exists #create new Service object or get exists
if not id: if not id:
service = Service() service = Service()
else: else:
@ -55,13 +69,14 @@ class ServiceForm(forms.Form):
# flag = flag | getattr(Theme.types, item) # flag = flag | getattr(Theme.types, item)
#generates bitfield #generates bitfield
countries = reduce(lambda x,y: x|y, (getattr(Service.country, item) for item in data['country'])) # countries = reduce(lambda x,y: x|y, (getattr(Service.country, item) for item in data['country']))
service.country= countries # service.country= countries
# cities = reduce(lambda x,y: x|y, (getattr(Service.city, item) for item in data['city']))
# service.city = cities
cities = reduce(lambda x,y: x|y, (getattr(Service.city, item) for item in data['city']))
service.city = cities
service.url = translit_with_separator(data['name_ru']) service.url = translit_with_separator(data['url']) if data['url'] else translit_with_separator(data['name_ru'])
service.price = data['price']+' '+data['currency']#%s %s'%(data['price'], data['currency']) service.price = data['price']+' '+data['currency']#%s %s'%(data['price'], data['currency'])
# uses because in the next loop data will be overwritten # uses because in the next loop data will be overwritten
service.save() service.save()
@ -76,21 +91,31 @@ class ServiceForm(forms.Form):
service_id = getattr(service, 'id') service_id = getattr(service, 'id')
populate_all(Service, data, service_id, zero_fields) populate_all(Service, data, service_id, zero_fields)
def clean_name_ru(self): countries = [item.id for item in data['europa']]
countries += [item.id for item in data['asia']]
countries += [item.id for item in data['america']]
countries += [item.id for item in data['africa']]
#add service to checked countries
Country.objects.filter(id__in=countries).\
update(services = F('services').bitor(getattr(Country.services, str(service.id))) )
Country.objects.exclude(id__in=countries).\
update(services = F('services').bitand(~getattr(Country.services, str(service.id))))
def clean_url(self):
""" """
check name which must be unique because it generate slug field check name which must be unique because it generate slug field
""" """
cleaned_data = super(ServiceForm, self).clean() cleaned_data = super(ServiceForm, self).clean()
name_ru = cleaned_data.get('name_ru') url = cleaned_data.get('url')
try: try:
Service.objects.get(url=translit_with_separator(name_ru)) service = Service.objects.get(url=translit_with_separator(url))
if (url ==service.url):
return url
except: except:
return name_ru return url
raise ValidationError('Такой урл уже занят')
raise ValidationError('Сервис с таким названием уже существует')

@ -8,6 +8,21 @@
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> <link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script> <script src="{% static 'js/select/select2.js' %}"></script>
<script src="{% static 'custom_js/make_select.js' %}"></script> <script src="{% static 'custom_js/make_select.js' %}"></script>
<style>
li{
list-style-type: none;
}
.region{
display: none;
}
</style>
<script>
$(document).ready(function(){
$('.reg').click(function(){
$(this).next().toggle();
});
});
</script>
{% endblock %} {% endblock %}
@ -28,20 +43,12 @@
{% with field='name' form=form languages=languages %} {% with field='name' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %} {% include 'admin/forms/multilang.html' %}
{% endwith %} {% endwith %}
{# country #} {# url #}
<div class="control-group {% if form.country.errors %}error{% endif %}"> <div class="control-group {% if form.url.errors %}error{% endif %}">
<label class="control-label">{{ form.country.label }}:</label> <label class="control-label">{{ form.url.label }}:</label>
<div class="controls"> <div class="controls">
{{ form.country }} {{ form.url }}
<span class="help-inline">{{ form.country.errors }}</span> <span class="help-inline">{{ form.url.errors }}</span>
</div>
</div>
{# country #}
<div class="control-group {% if form.city.errors %}error{% endif %}">
<label class="control-label">{{ form.city.label }}:</label>
<div class="controls">
{{ form.city }}
<span class="help-inline">{{ form.city.errors }}</span>
</div> </div>
</div> </div>
{# main_title #} {# main_title #}
@ -64,6 +71,20 @@
<span class="help-inline">{{ form.price.errors }}</span> <span class="help-inline">{{ form.price.errors }}</span>
</div> </div>
</div> </div>
{# countries #}
<div class="control-group {% if form.europa.errors %}error{% endif %}">
<label class="control-label">Страны:</label>
<div class="controls">
<label class="reg" style="margin-top: 20px;">{{ form.europa.label }}:</label>
{{ form.europa }}
<label class="reg">{{ form.asia.label }}:</label>
{{ form.asia }}
<label class="reg">{{ form.america.label }}:</label>
{{ form.america }}
<label class="reg">{{ form.africa.label }}:</label>
{{ form.africa }}
</div>
</div>
{# keywords #} {# keywords #}
{% with field='keywords' form=form languages=languages %} {% with field='keywords' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %} {% include 'admin/forms/multilang.html' %}

@ -23,7 +23,7 @@
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.price }}</td> <td>{{ item.price }}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/service/service/change/{{ item.url|lower }}"> <a class="btn btn-info" href="/service/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить <i class="icon-edit icon-white"></i> Изменить
</a> </a>
</td> </td>
@ -31,7 +31,7 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
<a class="btn btn-success" href="/service/service/add"><i class="icon-plus-sign icon-white"></i> Добавить услугу</a> <a class="btn btn-success" href="/service/add"><i class="icon-plus-sign icon-white"></i> Добавить услугу</a>
</div> </div>
{# pagination #} {# pagination #}
<div class="pagination pagination-centered"> <div class="pagination pagination-centered">

@ -2,9 +2,9 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^service/add.*/$', 'service.views.service_add'), url(r'^add.*/$', 'service.views.service_add'),
url(r'^service/change/(.*)/$', 'service.views.service_change'), url(r'^change/(.*)/$', 'service.views.service_change'),
url(r'^service/all/$', 'service.views.service_all'), url(r'^all/$', 'service.views.service_all'),
url(r'^review/add.*/$', 'service.views.review_add'), url(r'^review/add.*/$', 'service.views.review_add'),
url(r'^review/change/(?P<review_id>\d+).*/$', 'service.views.review_change'), url(r'^review/change/(?P<review_id>\d+).*/$', 'service.views.review_change'),

@ -33,23 +33,25 @@ def service_change(request, url):
service = Service.objects.get(url=url) service = Service.objects.get(url=url)
service_id = getattr(service, 'id') service_id = getattr(service, 'id')
except: except:
return HttpResponseRedirect('/service/service/all') return HttpResponseRedirect('/service/all')
if request.POST: if request.POST:
form = ServiceForm(request.POST) form = ServiceForm(request.POST)
if form.is_valid(): if form.is_valid():
form.save(service_id) form.save(service_id)
return HttpResponseRedirect('/service/service/all') return HttpResponseRedirect('/service/all')
else: else:
data = {} data = {}
#bitfield #bitfield
data['country'] = [item for item, bool in service.country if bool==True] # data['country'] = [item for item, bool in service.country if bool==True]
data['city'] = [item for item, bool in service.city if bool==True] # data['city'] = [item for item, bool in service.city if bool==True]
try:
data['price'] = service.price.split(' ')[0] data['price'] = service.price.split(' ')[0]
data['currency'] = service.price.split(' ')[1]
data['currency'] = service.price.split(' ')[1] except:pass
data['service_id'] = service_id
data['url'] = service.url
#data from translated fields #data from translated fields
for code, name in settings.LANGUAGES: for code, name in settings.LANGUAGES:
@ -63,7 +65,7 @@ def service_change(request, url):
data['descriptions_%s'%code] = obj.descriptions data['descriptions_%s'%code] = obj.descriptions
form = ServiceForm(data) form = ServiceForm(initial=data)
args = {} args = {}
args.update(csrf(request)) args.update(csrf(request))
@ -80,7 +82,7 @@ def service_add(request):
form = ServiceForm(request.POST) form = ServiceForm(request.POST)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return HttpResponseRedirect('/service/service/all') return HttpResponseRedirect('/service/all')
else: else:
form = ServiceForm() form = ServiceForm()

@ -135,7 +135,9 @@ class WebinarCreateForm(forms.Form):
cleaned_data = super(WebinarCreateForm, self).clean() cleaned_data = super(WebinarCreateForm, self).clean()
name_ru = cleaned_data.get('name_ru') name_ru = cleaned_data.get('name_ru')
try: try:
Webinar.objects.get(url=translit_with_separator(name_ru)) webinar = Webinar.objects.get(url=translit_with_separator(name_ru))
if (webinar.url == translit_with_separator(name_ru)):
return name_ru
except: except:
return name_ru return name_ru
@ -197,8 +199,4 @@ class WebinarChangeForm(WebinarCreateForm):
""" """
organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False) organiser = forms.ModelMultipleChoiceField(label='Организаторы', queryset=Organiser.objects.all(), required=False)
company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False) company = forms.ModelMultipleChoiceField(label='Компании', queryset=Company.objects.all(), required=False)
users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False) users = forms.ModelMultipleChoiceField(label='Пользователи', queryset=User.objects.all(), required=False)
def clean_name_ru(self):
name_ru = self.cleaned_data.get('name_ru')
return name_ru
Loading…
Cancel
Save