diff options
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r-- | ishtar_common/forms.py | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 973a61228..a2e7a4fd1 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -748,7 +748,9 @@ def get_form_selection( class_name, label, key, model, base_form, get_url, not_selected_error=_(u"You should select an item."), new=False, new_message=_(u"Add a new item"), get_full_url=None, - gallery=False, map=False, base_form_select=None): + gallery=False, map=False, multi=False, base_form_select=None, + alt_pk_field=None + ): """ Generate a class selection form class_name -- name of the class @@ -774,31 +776,28 @@ def get_form_selection( widget_kwargs['gallery'] = True if map: widget_kwargs['map'] = models.profile_mapping() - attrs[key] = forms.IntegerField( + if multi: + widget_kwargs['multiple_select'] = True + field = forms.CharField + valid = models.valid_ids + else: + field = forms.IntegerField + valid = models.valid_id + + if alt_pk_field: + key = alt_pk_field + attrs[key] = field( label="", required=False, - validators=[models.valid_id(model)], + validators=[valid(model)], widget=widgets.DataTable(reverse_lazy(get_url), base_form, model, **widget_kwargs)) - def clean(self): - cleaned_data = self.cleaned_data - if self._main_key not in cleaned_data \ - or not cleaned_data[self._main_key]: - raise forms.ValidationError(self._not_selected_error) - - pk = self.cleaned_data[self._main_key] - try: - item = model.objects.get(pk=pk) - except model.DoesNotExist: - raise forms.ValidationError(_("Invalid selection.")) - if hasattr(item, "locked") and item.locked: - raise forms.ValidationError(_("This item is locked for edition.")) - return cleaned_data - attrs['clean'] = clean attrs['SEARCH_AND_SELECT'] = True if not base_form_select: base_form_select = forms.Form - return type(class_name, (base_form_select,), attrs) + if not isinstance(base_form_select, (tuple, list)): + base_form_select = (base_form_select,) + return type(class_name, base_form_select, attrs) def get_data_from_formset(data): |