доработал форму

remotes/origin/stage6
Alexander Burdeiny 9 years ago
parent 747ec5324e
commit b1a25bc3f1
  1. 11
      accounts/views.py
  2. 89
      emencia/django/newsletter/forms.py
  3. 4
      static/mailing_settings/js/main.js
  4. 8
      templates/client/accounts/mailing_settings.html

@ -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):
"""

@ -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):

@ -105,7 +105,7 @@
renderSelectedCities = function (id, text) {
return '<li>' +
'<input type="hidden" name="r_cities_' + id + '" value="' + id + '">' +
'<input type="hidden" name="r_cities" value="' + id + '">' +
text +
'<a href="#">&times;</a>' +
'</li>'
@ -246,4 +246,4 @@ $(function () {
});
$('.scroll-container').mCustomScrollbar();
});
});

@ -32,14 +32,14 @@
<div class="columns">
<div class="column">
<h3>{% trans 'Ваши темы:' %}</h3>
{{ form.themes.label_tag }}
{{ form.themes }}
{{ form.th.label_tag }}
{{ form.th }}
<ul id="selected_themes" class="selected"></ul>
<a href="#search-modal" class="modal_trigger themes_trigger">{% trans 'Уточнить темы' %}</a>
<h3>{% trans 'Теги' %}</h3>
{{ form.tags.label_tag }}
{{ form.tags }}
{{ form.tg.label_tag }}
{{ form.tg }}
<ul id="selected_tags" class="selected"></ul>
</div>

Loading…
Cancel
Save