diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/forms.py | 37 | ||||
| -rw-r--r-- | ishtar_common/wizards.py | 16 | 
2 files changed, 27 insertions, 26 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): diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index f36976684..7802f82cb 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -959,13 +959,15 @@ class Wizard(IshtarWizard):              url = reverse(self.redirect_url)              if self.open_created_in_redirect:                  url += "?open_item={}".format(obj.pk) -            return HttpResponseRedirect(url) - -        # force evaluation of lazy urls -        wizard_done_window = str(self.wizard_done_window) -        if wizard_done_window: -            dct['wizard_done_window'] = wizard_done_window -        res = render(self.request, self.wizard_done_template, dct) +            res = HttpResponseRedirect(url) +            if not return_object: +                return res +        else: +            # force evaluation of lazy urls +            wizard_done_window = str(self.wizard_done_window) +            if wizard_done_window: +                dct['wizard_done_window'] = wizard_done_window +            res = render(self.request, self.wizard_done_template, dct)          return return_object and (obj, res) or res      def get_deleted(self, keys): | 
