summaryrefslogtreecommitdiff
path: root/ishtar_common/widgets.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/widgets.py')
-rw-r--r--ishtar_common/widgets.py18
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):