summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-02-02 11:51:47 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-02-02 11:51:47 +0100
commite6e4aed623ec61def0944ce97ac2e4d6c873f5ac (patch)
treee2a847b04c5fea704c05fc7eee165a85306b2242
parentd132ff86849a077093df8701e5a066bc50120d2b (diff)
downloadIshtar-e6e4aed623ec61def0944ce97ac2e4d6c873f5ac.tar.bz2
Ishtar-e6e4aed623ec61def0944ce97ac2e4d6c873f5ac.zip
Fix multiautocompletefield widget to manage nicely model
-rw-r--r--ishtar_common/widgets.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index f257801d8..404d5fabe 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -39,25 +39,33 @@ reverse_lazy = lazy(reverse, unicode)
class MultipleAutocompleteField(forms.MultipleChoiceField):
def __init__(self, *args, **kwargs):
- model = None
+ self.model = None
if 'model' in kwargs:
- model = kwargs.pop('model')
- if 'choices' not in kwargs and model:
- kwargs['choices'] = [(i.pk, unicode(i))for i in model.objects.all()]
+ self.model = kwargs.pop('model')
+ if 'choices' not in kwargs and self.model:
+ kwargs['choices'] = []
new = kwargs.pop('new') if 'new' in kwargs else None
- if 'widget' not in kwargs and model:
+ if 'widget' not in kwargs and self.model:
kwargs['widget'] = JQueryAutoComplete(reverse_lazy(
- 'autocomplete-'+model.__name__.lower()),
- associated_model=model, new=new,
+ 'autocomplete-'+self.model.__name__.lower()),
+ associated_model=self.model, new=new,
multiple=True)
super(MultipleAutocompleteField, self).__init__(*args, **kwargs)
+ def get_choices(self):
+ return [(i.pk, unicode(i)) for i in self.model.objects.all()]
+
+ def valid_value(self, value):
+ if not self.model:
+ return super(MultipleAutocompleteField, self).valid_value(value)
+ return bool(self.model.objects.filter(pk=value).count())
+
def clean(self, value):
if value:
# clean JS messup with values
try:
if type(value) not in (list, tuple):
- value = [value]
+ value = [int(value)]
else:
val = value
value = []