diff options
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r-- | ishtar_common/widgets.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index d0ade6fea..2e6dc36af 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -276,8 +276,8 @@ class Select2Base(Select2Media): else: attrs["style"] = "width: 370px" - if value: - if type(value) not in (list, tuple): + if value and getattr(self, "multiple", False) and \ + not isinstance(value, (list, tuple)): value = value.split(",") options = "" @@ -352,7 +352,7 @@ class Select2Simple(Select2Base, forms.Select): class Select2Multiple(Select2Base, forms.SelectMultiple): - pass + multiple = True class CheckboxSelectMultiple(CheckboxSelectMultipleBase): @@ -423,6 +423,8 @@ class Select2BaseField(object): def valid_value(self, value): if not self.model: return super(Select2BaseField, self).valid_value(value) + if isinstance(value, self.model): + return True return bool(self.get_q().filter(pk=value).count()) @@ -439,7 +441,15 @@ class Select2MultipleField(Select2BaseField, forms.MultipleChoiceField): class Select2SimpleField(Select2BaseField, forms.ChoiceField): - pass + multiple = False + + def to_python(self, value): + value = super().to_python(value) + if not value or not getattr(self, "model", None) or getattr(self, "remote", False): + return value + if not self.valid_value(value): + return + return self.get_q().filter(pk=value).all()[0] class DeleteWidget(forms.CheckboxInput): |