From b1a25bc3f100bbb546b06733965f4dde1a64f320 Mon Sep 17 00:00:00 2001 From: Alexander Burdeiny Date: Wed, 28 Sep 2016 11:02:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=84=D0=BE=D1=80=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- accounts/views.py | 11 +++ emencia/django/newsletter/forms.py | 89 +++++++++++-------- static/mailing_settings/js/main.js | 4 +- .../client/accounts/mailing_settings.html | 8 +- 4 files changed, 70 insertions(+), 42 deletions(-) diff --git a/accounts/views.py b/accounts/views.py index aa92f86d..a5d76b7e 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -96,6 +96,9 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView): template_name = 'client/accounts/mailing_settings.html' success_url = reverse_lazy('accounts-mailing_settings') + def get_success_url(self): + return self.success_url + def get_object(self): self.extra_ctx.update({ 'r_cities': City.used.russia(), @@ -108,8 +111,16 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView): def form_valid(self, form): print(form.cleaned_data) + print(form.errors) + print(self.request.POST) return super(MailingSettings, self).form_valid(form) + def form_invalid(self, form): + print(form.cleaned_data) + print(form.errors) + print(self.request.POST) + return super(MailingSettings, self).form_invalid(form) + class CalendarView(TemplateView): """ diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index a7eba335..d78f4a26 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -64,37 +64,48 @@ class ML_ModelMultipleChoiceField(forms.ModelMultipleChoiceField): return [] choices = property(_get_choices, forms.ChoiceField._set_choices) - def clean(self, value): - if self.required and not value: - raise ValidationError(self.error_messages['required']) - elif not self.required and not value: - return self.queryset.none() - if not isinstance(value, (list, tuple)): - raise ValidationError(self.error_messages['list']) - key = self.to_field_name or 'pk' - - qs = self.queryset.filter(**{'%s__in' % key: value}) - pks = set([force_text(getattr(o, key)) for o in qs]) - for val in value: - if force_text(val) not in pks: - raise ValidationError(self.error_messages['invalid_choice'] % val) - # Since this overrides the inherited ModelChoiceField.clean - # we run custom validators here - self.run_validators(value) - return qs + # def clean(self, value): + # if self.required and not value: + # raise ValidationError(self.error_messages['required']) + # elif not self.required and not value: + # return self.queryset.none() + # if not isinstance(value, (list, tuple)): + # raise ValidationError(self.error_messages['list']) + # key = self.to_field_name or 'pk' + + # qs = self.queryset.filter(**{'%s__in' % key: value}) + # pks = set([force_text(getattr(o, key)) for o in qs]) + # for val in value: + # if force_text(val) not in pks: + # raise ValidationError(self.error_messages['invalid_choice'] % val) + # # Since this overrides the inherited ModelChoiceField.clean + # # we run custom validators here + # self.run_validators(value) + # return qs class MailingSettingsForm(forms.ModelForm): - # r_cities = ML_ModelMultipleChoiceField() - # f_countries = ML_ModelMultipleChoiceField() - # tags = ML_ModelMultipleChoiceField() - # themes = ML_ModelMultipleChoiceField() + r_cities = ML_ModelMultipleChoiceField( + label=_(u'Города России'), required=False, + queryset=City.objects.all().distinct()) + f_countries = ML_ModelMultipleChoiceField( + label=_(u'Зарубежные страны'), required=False, + queryset=Country.objects.all()) + tg = ML_ModelMultipleChoiceField( + label=_(u'Теги'), required=False, + queryset=Tag.objects.all()) + th = ML_ModelMultipleChoiceField( + label=_(u'Тематики'), required=False, + queryset=Theme.objects.all()) + area = ML_ModelMultipleChoiceField( + label=_(u'Регион'), required=False, + queryset=Area.objects.all()) class Meta: model = Contact fields = [ 'moscow', 'russia', 'r_cities', 'foreign', 'f_countries', - 'tags', 'themes', + # 'tags', 'themes', 'periodic', 'periodic_day', 'content_news', 'content_overview', 'content_articles', ] @@ -110,19 +121,25 @@ class MailingSettingsForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(MailingSettingsForm, self).__init__(*args, **kwargs) - self.fields['f_countries'].queryset = Country.objects.none() - self.fields['r_cities'].queryset = City.objects.none() - self.fields['tags'].queryset = Tag.objects.none() - self.fields['themes'].queryset = Theme.objects.none() - if self.instance and self.instance.pk: - if self.instance.f_countries: - self.fields['f_countries'].queryset = self.instance.f_countries.distinct() - if self.instance.r_cities: - self.fields['r_cities'].queryset = self.instance.r_cities.distinct() - if self.instance.tags: - self.fields['tags'].queryset = self.instance.tags.distinct() - if self.instance.themes: - self.fields['themes'].queryset = self.instance.themes.distinct() + # self.fields['f_countries'].queryset = Country.objects.none() + # self.fields['r_cities'].queryset = City.objects.none() + # self.fields['tags'].queryset = Tag.objects.none() + # self.fields['themes'].queryset = Theme.objects.none() + # if self.instance and self.instance.pk: + # if self.instance.f_countries: + # self.fields['f_countries'].queryset = self.instance.f_countries.distinct() + # if self.instance.r_cities: + # self.fields['r_cities'].queryset = self.instance.r_cities.distinct() + # if self.instance.tags: + # self.fields['tags'].queryset = self.instance.tags.distinct() + # if self.instance.themes: + # self.fields['themes'].queryset = self.instance.themes.distinct() + + def save(self): + obj = super(MailingSettingsForm, self).save(commit=False) + obj.tags = self.cleaned_data.get('tg') or [] + obj.themes = self.cleaned_data.get('th') or [] + obj.save() class AllMailingListSubscriptionForm(MailingListSubscriptionForm): diff --git a/static/mailing_settings/js/main.js b/static/mailing_settings/js/main.js index 3c9b4d3a..d12c8b31 100644 --- a/static/mailing_settings/js/main.js +++ b/static/mailing_settings/js/main.js @@ -105,7 +105,7 @@ renderSelectedCities = function (id, text) { return '
  • ' + - '' + + '' + text + '×' + '
  • ' @@ -246,4 +246,4 @@ $(function () { }); $('.scroll-container').mCustomScrollbar(); -}); \ No newline at end of file +}); diff --git a/templates/client/accounts/mailing_settings.html b/templates/client/accounts/mailing_settings.html index 3f03f814..263a1108 100644 --- a/templates/client/accounts/mailing_settings.html +++ b/templates/client/accounts/mailing_settings.html @@ -32,14 +32,14 @@

    {% trans 'Ваши темы:' %}

    - {{ form.themes.label_tag }} - {{ form.themes }} + {{ form.th.label_tag }} + {{ form.th }}
      {% trans 'Уточнить темы' %}

      {% trans 'Теги' %}

      - {{ form.tags.label_tag }} - {{ form.tags }} + {{ form.tg.label_tag }} + {{ form.tg }}