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

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' template_name = 'client/accounts/mailing_settings.html'
success_url = reverse_lazy('accounts-mailing_settings') success_url = reverse_lazy('accounts-mailing_settings')
def get_success_url(self):
return self.success_url
def get_object(self): def get_object(self):
self.extra_ctx.update({ self.extra_ctx.update({
'r_cities': City.used.russia(), 'r_cities': City.used.russia(),
@ -108,8 +111,16 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView):
def form_valid(self, form): def form_valid(self, form):
print(form.cleaned_data) print(form.cleaned_data)
print(form.errors)
print(self.request.POST)
return super(MailingSettings, self).form_valid(form) 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): class CalendarView(TemplateView):
""" """

@ -64,37 +64,48 @@ class ML_ModelMultipleChoiceField(forms.ModelMultipleChoiceField):
return [] return []
choices = property(_get_choices, forms.ChoiceField._set_choices) choices = property(_get_choices, forms.ChoiceField._set_choices)
def clean(self, value): # def clean(self, value):
if self.required and not value: # if self.required and not value:
raise ValidationError(self.error_messages['required']) # raise ValidationError(self.error_messages['required'])
elif not self.required and not value: # elif not self.required and not value:
return self.queryset.none() # return self.queryset.none()
if not isinstance(value, (list, tuple)): # if not isinstance(value, (list, tuple)):
raise ValidationError(self.error_messages['list']) # raise ValidationError(self.error_messages['list'])
key = self.to_field_name or 'pk' # key = self.to_field_name or 'pk'
qs = self.queryset.filter(**{'%s__in' % key: value}) # qs = self.queryset.filter(**{'%s__in' % key: value})
pks = set([force_text(getattr(o, key)) for o in qs]) # pks = set([force_text(getattr(o, key)) for o in qs])
for val in value: # for val in value:
if force_text(val) not in pks: # if force_text(val) not in pks:
raise ValidationError(self.error_messages['invalid_choice'] % val) # raise ValidationError(self.error_messages['invalid_choice'] % val)
# Since this overrides the inherited ModelChoiceField.clean # # Since this overrides the inherited ModelChoiceField.clean
# we run custom validators here # # we run custom validators here
self.run_validators(value) # self.run_validators(value)
return qs # return qs
class MailingSettingsForm(forms.ModelForm): class MailingSettingsForm(forms.ModelForm):
# r_cities = ML_ModelMultipleChoiceField() r_cities = ML_ModelMultipleChoiceField(
# f_countries = ML_ModelMultipleChoiceField() label=_(u'Города России'), required=False,
# tags = ML_ModelMultipleChoiceField() queryset=City.objects.all().distinct())
# themes = ML_ModelMultipleChoiceField() 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: class Meta:
model = Contact model = Contact
fields = [ fields = [
'moscow', 'russia', 'r_cities', 'foreign', 'f_countries', 'moscow', 'russia', 'r_cities', 'foreign', 'f_countries',
'tags', 'themes', # 'tags', 'themes',
'periodic', 'periodic_day', 'content_news', 'content_overview', 'periodic', 'periodic_day', 'content_news', 'content_overview',
'content_articles', 'content_articles',
] ]
@ -110,19 +121,25 @@ class MailingSettingsForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MailingSettingsForm, self).__init__(*args, **kwargs) super(MailingSettingsForm, self).__init__(*args, **kwargs)
self.fields['f_countries'].queryset = Country.objects.none() # self.fields['f_countries'].queryset = Country.objects.none()
self.fields['r_cities'].queryset = City.objects.none() # self.fields['r_cities'].queryset = City.objects.none()
self.fields['tags'].queryset = Tag.objects.none() # self.fields['tags'].queryset = Tag.objects.none()
self.fields['themes'].queryset = Theme.objects.none() # self.fields['themes'].queryset = Theme.objects.none()
if self.instance and self.instance.pk: # if self.instance and self.instance.pk:
if self.instance.f_countries: # if self.instance.f_countries:
self.fields['f_countries'].queryset = self.instance.f_countries.distinct() # self.fields['f_countries'].queryset = self.instance.f_countries.distinct()
if self.instance.r_cities: # if self.instance.r_cities:
self.fields['r_cities'].queryset = self.instance.r_cities.distinct() # self.fields['r_cities'].queryset = self.instance.r_cities.distinct()
if self.instance.tags: # if self.instance.tags:
self.fields['tags'].queryset = self.instance.tags.distinct() # self.fields['tags'].queryset = self.instance.tags.distinct()
if self.instance.themes: # if self.instance.themes:
self.fields['themes'].queryset = self.instance.themes.distinct() # 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): class AllMailingListSubscriptionForm(MailingListSubscriptionForm):

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

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

Loading…
Cancel
Save