diff --git a/accounts/views.py b/accounts/views.py index 01cfccd8..aa92f86d 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -106,6 +106,10 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView): instance = None return instance + def form_valid(self, form): + print(form.cleaned_data) + return super(MailingSettings, self).form_valid(form) + class CalendarView(TemplateView): """ diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index aa42c0a7..a7eba335 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -10,6 +10,7 @@ from django.db.models import Sum from django.http import Http404 from django.utils import translation from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import smart_text, force_text from emencia.django.newsletter.models import ( Contact, @@ -55,7 +56,40 @@ class MailingListSubscriptionForm(forms.ModelForm): exclude = ('email',) +class ML_ModelMultipleChoiceField(forms.ModelMultipleChoiceField): + ''' use it with field.queryset = Model.objects.none() + ''' + + def _get_choices(self): + 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 + + class MailingSettingsForm(forms.ModelForm): + # r_cities = ML_ModelMultipleChoiceField() + # f_countries = ML_ModelMultipleChoiceField() + # tags = ML_ModelMultipleChoiceField() + # themes = ML_ModelMultipleChoiceField() + class Meta: model = Contact fields = [ diff --git a/functions/models_methods.py b/functions/models_methods.py index 6c011b11..c1eb0566 100644 --- a/functions/models_methods.py +++ b/functions/models_methods.py @@ -187,12 +187,16 @@ class CityManager(TranslationManager): lang = translation.get_language() key = 'russia_cities_%s' % lang if cached and key in cache: - cached_cities = cache.get(key) - return cached_cities + cities = cache.get(key) else: - cities = list(self.language(lang).filter(country__url='russia').order_by('name').values_list('pk', 'name')) + cities = list( + self.language(lang).filter( + country__url='russia', exposition_city__isnull=False, + conference_city__isnull=False + ).distinct().order_by('name').values_list('pk', 'name') + ) cache.set(key, cities, self.cache_time) - return cities + return cities def hvad_to_dict(object): diff --git a/settings/views.py b/settings/views.py index 80875d27..62681d8b 100644 --- a/settings/views.py +++ b/settings/views.py @@ -13,11 +13,11 @@ from company.models import Company from conference.models import Conference # every this model must have method get_subcategories -categories = {'area':{'sub':True, 'model':Area, 'sub_categorie_name':'co'}, - 'co':{'sub':False, 'model':Country, 'sub_categorie_name':'ci'}, - 'th':{'sub':False, 'model':Theme, 'sub_categorie_name':'tg'}, - 'ci':{'sub':False, 'model':City, 'sub_categorie_name':None}, - 'tg':{'sub':False, 'model':Tag, 'sub_categorie_name':None}} +categories = {'area': {'sub': True, 'model': Area, 'sub_categorie_name': 'co'}, + 'co': {'sub': False, 'model': Country, 'sub_categorie_name': 'ci'}, + 'th': {'sub': False, 'model': Theme, 'sub_categorie_name': 'tg'}, + 'ci': {'sub': False, 'model': City, 'sub_categorie_name': None}, + 'tg': {'sub': False, 'model': Tag, 'sub_categorie_name': None}} def sub_category(request): @@ -30,12 +30,15 @@ def sub_category(request): model = categorie['model'] obj = get_object_or_404(model, pk=categorie_id) objects = obj.get_sub_categories() + if model == Area and request.GET.get('norussia'): + objects = filter(lambda x: x['id'] != 159, objects) #response = {'sub_categories': objects, 'sub':categorie['sub'], 'sub_name': categorie['sub_categorie_name']} return HttpResponse(json.dumps(objects), content_type='application/json') else: raise Http404 + search_forms = {'theme':'', 'place':''} # сделать с помощью haystack!!! def search_autocomplete(request): @@ -159,4 +162,4 @@ def get_popover(request): html = render_to_string(popover) response['html'] = html - return HttpResponse(json.dumps(response), content_type='application/json') \ No newline at end of file + return HttpResponse(json.dumps(response), content_type='application/json') diff --git a/templates/client/accounts/mailing_settings.html b/templates/client/accounts/mailing_settings.html index 99e7390f..3f03f814 100644 --- a/templates/client/accounts/mailing_settings.html +++ b/templates/client/accounts/mailing_settings.html @@ -177,7 +177,7 @@
- {% include 'client/popups/countries.html' %} + {% include 'client/popups/mailing_settings_countries.html' %}
diff --git a/templates/client/popups/mailing_settings_countries.html b/templates/client/popups/mailing_settings_countries.html new file mode 100644 index 00000000..07f0ed6b --- /dev/null +++ b/templates/client/popups/mailing_settings_countries.html @@ -0,0 +1,43 @@ +{% load static %} +{% load i18n %} +{% load template_filters %} + + diff --git a/templates/client/popups/russia_cities.html b/templates/client/popups/russia_cities.html index ccbf7869..13466aad 100644 --- a/templates/client/popups/russia_cities.html +++ b/templates/client/popups/russia_cities.html @@ -16,7 +16,7 @@ {% for pk, name in r_cities %}