|
|
|
|
@ -4,6 +4,7 @@ from collections import namedtuple |
|
|
|
|
import re |
|
|
|
|
|
|
|
|
|
from django import forms |
|
|
|
|
from django.core.urlresolvers import reverse |
|
|
|
|
from django.utils import translation |
|
|
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
|
|
|
|
|
|
@ -24,7 +25,7 @@ from theme.models import Theme |
|
|
|
|
from city.models import City |
|
|
|
|
from country.models import Area, Country |
|
|
|
|
from exposition.models import Exposition |
|
|
|
|
|
|
|
|
|
from conference.models import Conference |
|
|
|
|
|
|
|
|
|
class ContactSettingsForm(forms.ModelForm): |
|
|
|
|
city = forms.CharField(label=_(u'Город'), widget=forms.HiddenInput() ,required=False) |
|
|
|
|
@ -248,17 +249,57 @@ class AttachmentForm(forms.ModelForm): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NewsletterRecommendForm(forms.ModelForm): |
|
|
|
|
rx = re.compile(r'^(?P<type>c|e)(?P<pk>\d+)$') |
|
|
|
|
verbose = _(u'Создание/Редактирование рекомендации') |
|
|
|
|
exposition = forms.IntegerField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False) |
|
|
|
|
# exposition = forms.IntegerField(label=_(u'Выставка'), widget=forms.HiddenInput(), required=False) |
|
|
|
|
event_models = {'c': Conference, 'e': Exposition} |
|
|
|
|
event = forms.CharField(label=_(u'Событие'), widget=forms.Select()) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
model = NewsletterRecommend |
|
|
|
|
fields = ('theme', 'exposition', 'fr', 'to') |
|
|
|
|
fields = ('theme', 'fr', 'to') |
|
|
|
|
|
|
|
|
|
def clean_exposition(self): |
|
|
|
|
expo_id = self.cleaned_data['exposition'] |
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
super(NewsletterRecommendForm, self).__init__(*args, **kwargs) |
|
|
|
|
# import pdb; pdb.set_trace() |
|
|
|
|
if self.instance and self.instance.pk: |
|
|
|
|
event = self.instance.event() |
|
|
|
|
id = event.__class__.__name__.lower()[:1] + str(event.pk) |
|
|
|
|
option = u'<option value="{id}" selected="selected">{label}</option>'.format(id=id, label=event.name) |
|
|
|
|
self.fields['event'].widget.render_options = lambda choices, value: option |
|
|
|
|
self.initial['event'] = id |
|
|
|
|
|
|
|
|
|
self.fields['event'].widget.attrs.update({ |
|
|
|
|
'data-ajax-url': reverse('admin_events_search'), |
|
|
|
|
'select2': 'true', |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
def clean_event(self): |
|
|
|
|
event = self.cleaned_data.get('event') |
|
|
|
|
print(event) |
|
|
|
|
match = self.rx.match(event) |
|
|
|
|
if not match: |
|
|
|
|
raise forms.ValidationError(_(u'Введены неверные данные')) |
|
|
|
|
model = self.event_models.get(match.group('type')) |
|
|
|
|
self.event_model = model |
|
|
|
|
event_id = match.group('pk') |
|
|
|
|
print(model, event_id, event) |
|
|
|
|
try: |
|
|
|
|
expo = Exposition.objects.get(id=expo_id) |
|
|
|
|
except Exposition.DoesNotExist: |
|
|
|
|
raise forms.ValidationError(_(u'Такой выставки не существует')) |
|
|
|
|
return expo |
|
|
|
|
event = model.objects.get(pk=event_id) |
|
|
|
|
except model.DoesNotExist: |
|
|
|
|
raise forms.ValidationError(_(u'Такого события не существует')) |
|
|
|
|
return event |
|
|
|
|
|
|
|
|
|
def save(self, commit=True): |
|
|
|
|
obj = super(NewsletterRecommendForm, self).save(commit=False) |
|
|
|
|
if self.cleaned_data['event']: |
|
|
|
|
if self.event_model == Exposition: |
|
|
|
|
obj.exposition = self.cleaned_data['event'] |
|
|
|
|
else: |
|
|
|
|
obj.conference = self.cleaned_data['event'] |
|
|
|
|
if commit: |
|
|
|
|
obj.save() |
|
|
|
|
if not obj.pk: |
|
|
|
|
obj.save() |
|
|
|
|
obj.theme = self.cleaned_data['theme'] |
|
|
|
|
return obj |