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 '