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