# -*- coding: utf-8 -*- from django import forms from expobanner.models import URL, BannerGroup, Banner, Paid, Top, MainPage from exposition.models import Exposition from country.models import Country from ckeditor.widgets import CKEditorWidget from theme.models import Theme, Tag class UrlCreateForm(forms.ModelForm): verbose = u'Создать урл' class Meta: model = URL exclude = ['created_at', 'updated_at', 'sites'] class BannerCreateGroupForm(forms.ModelForm): verbose = u'Создать групу' class Meta: model = BannerGroup exclude = ['created_at', 'updated_at', 'speed'] class BannerGroupUpdateForm(BannerCreateGroupForm): verbose = u'Изменить групу' class Meta: model = BannerGroup exclude = ['created_at', 'updated_at', 'slug', 'speed'] class BannerCreateForm(forms.ModelForm): verbose = u'Создать банер' text = forms.CharField(label=u'Текст', required=False, widget=CKEditorWidget) class Meta: model = Banner exclude = ['created_at', 'updated_at', 'often', 'paid', 'stat_pswd', 'cookie', 'link'] class BannerLinkCreateForm(forms.ModelForm): verbose = u'Отслеживаемую ссылку' class Meta: model = Banner fields = ['public', 'alt', 'url'] exclude = ['created_at', 'updated_at', 'often', 'paid', 'stat_pswd', 'cookie', 'link'] def save(self, commit=True): banner = super(BannerLinkCreateForm, self).save(commit=False) if commit: banner.link =True banner.save() return banner class ClientStatForm(forms.Form): stat_pswd = forms.CharField(label=u'Введите пароль:') def check_pass(self, obj): pswd = self.cleaned_data['stat_pswd'] return obj.stat_pswd == pswd class PaidCreateForm(forms.ModelForm): verbose = u'Создать проплаченую выставку' exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) tickets = forms.URLField(label=u'Линк на билеты') participation = forms.URLField(label=u'Линк на участие') official = forms.URLField(label=u'Линк на официальный сайт') class Meta: model = Paid fields = ['logo', 'organiser', 'public'] def save(self, commit=True): paid = super(PaidCreateForm, self).save(commit=False) if commit: expo = self.cleaned_data['exposition'] tickets = self.cleaned_data['tickets'] tickets_link = Banner.objects.create_for_paid(expo, tickets, 'tickets') participation = self.cleaned_data['participation'] participation_link = Banner.objects.create_for_paid(expo, participation, 'participation') official = self.cleaned_data['official'] official_link = Banner.objects.create_for_paid(expo, official, 'official') catalog = expo.get_permanent_url() catalog_link = Banner.objects.create_for_paid(expo, catalog, 'catalog') paid.tickets = tickets_link paid.participation = participation_link paid.official = official_link paid.catalog = catalog_link paid.save() expo.paid_new = paid expo.save() return paid def clean_exposition(self): expo_id = self.cleaned_data['exposition'] try: expo = Exposition.objects.get(id=expo_id) except Exposition.DoesNotExist: raise forms.ValidationError(u'Такой выставки не существует') return expo class MainCreateForm(forms.ModelForm): verbose = u'Добавить выставку на главную' exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) class Meta: model = MainPage fields = ['position', 'public'] def save(self, commit=True): main = super(MainCreateForm, self).save(commit=False) if commit: expo = self.cleaned_data['exposition'] link = expo.get_permanent_url() link_b = Banner.objects.create_for_paid(expo, link, 'main_page_link') main.link = link_b main.save() expo.main = main expo.save() return main def clean_exposition(self): expo_id = self.cleaned_data['exposition'] try: expo = Exposition.objects.get(id=expo_id) except Exposition.DoesNotExist: raise forms.ValidationError(u'Такой выставки не существует') return expo class PaidUpdateForm(forms.ModelForm): tickets = forms.URLField(label=u'Линк на билеты') participation = forms.URLField(label=u'Линк на участие') official = forms.URLField(label=u'Линк на официальный сайт') class Meta: model = Paid fields = ['logo', 'organiser', 'public'] def save(self, commit=True): paid = super(PaidUpdateForm, self).save(commit=False) if commit: tickets = self.cleaned_data['tickets'] b_tickets = paid.tickets if tickets != b_tickets.url: b_tickets.url = tickets b_tickets.save() participation = self.cleaned_data['participation'] b_participation = paid.participation if participation != b_participation.url: b_participation.url = participation b_participation.save() official = self.cleaned_data['official'] b_official = paid.official if official != b_official.url: b_official.url = official b_official.save() paid.save() return paid class MainUpdateForm(forms.ModelForm): class Meta: model = MainPage fields = ['position', 'public'] class TopCreateForm(forms.ModelForm): verbose = u'Создать выставку в топе' exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput()) country = forms.MultipleChoiceField(label=u'Страна', choices=[('', ' ')] + [(c.id, c.name) for c in Country.objects.all()], required=False) theme = forms.MultipleChoiceField(label=u'Тематика', required=False, choices=[('', ' ')] + [(item.id, item.name) for item in Theme.objects.language().all()]) #excluded_cities = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False) #excluded_tags = forms.CharField(label=u'Тег', widget=forms.HiddenInput(), required=False) class Meta: model = Top fields = ['catalog', 'position', 'theme', 'country', 'fr', 'to'] def save(self, commit=True): top = super(TopCreateForm, self).save(commit=False) # Prepare a 'save_m2m' method for the form, old_save_m2m = self.save_m2m def save_m2m(): old_save_m2m() # This is where we actually link the pizza with toppings top.theme.clear() for theme in self.cleaned_data['theme']: top.theme.add(theme) top.country.clear() for country in self.cleaned_data['country']: top.country.add(country) self.save_m2m = save_m2m if commit: expo = self.cleaned_data['exposition'] link = expo.get_permanent_url() link_b = Banner.objects.create_for_paid(expo, link, 'top_link') top.link = link_b top.save() self.save_m2m() expo.top = top expo.save() return top def clean_theme(self): theme_ids = self.cleaned_data['theme'] if theme_ids: return Theme.objects.filter(id__in=theme_ids) return Theme.objects.none() def clean_country(self): country_ids = self.cleaned_data['country'] if country_ids: return Country.objects.filter(id__in=country_ids) return Country.objects.none() def clean_exposition(self): expo_id = self.cleaned_data['exposition'] try: expo = Exposition.objects.get(id=expo_id) except Exposition.DoesNotExist: raise forms.ValidationError(u'Такой выставки не существует') return expo class TopUpdateForm(forms.ModelForm): verbose = u'Изменить выставку' class Meta: model = Top fields = ['catalog', 'position', 'theme', 'country', 'fr', 'to'] def save(self, commit=True): top = super(TopUpdateForm, self).save(commit=False) # Prepare a 'save_m2m' method for the form, old_save_m2m = self.save_m2m def save_m2m(): old_save_m2m() # This is where we actually link the pizza with toppings top.theme.clear() for theme in self.cleaned_data['theme']: top.theme.add(theme) top.country.clear() for country in self.cleaned_data['country']: top.country.add(country) self.save_m2m = save_m2m if commit: top.save() self.save_m2m() return top