diff options
-rw-r--r-- | ishtar_common/widgets.py | 24 |
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 = [] |