From e6e4aed623ec61def0944ce97ac2e4d6c873f5ac Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 2 Feb 2015 11:51:47 +0100 Subject: Fix multiautocompletefield widget to manage nicely model --- ishtar_common/widgets.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'ishtar_common/widgets.py') 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 = [] -- cgit v1.2.3