yourlabs / django-autocomplete-light

A fresh approach to autocomplete implementations, specially for Django. Status: v4 alpha, v3 stable, v2 & v1 deprecated.
https://django-autocomplete-light.readthedocs.io
MIT License
1.79k stars 467 forks source link

Correctly render selected choice for ListSelect2 grouped fields #1299

Open j-bernard opened 2 years ago

j-bernard commented 2 years ago

ListSelect2 does not correctly render the selected choices when used with groups.

This snippet works for groups but I did not make a PR as I'll let the way to detect or declare grouped vs non-grouped to you.

class LgrGroupedListSelect2(autocomplete.ListSelect2):

    def filter_choices_to_render(self, selected_choices):
        # dal.widget.WidgetMixin.filter_choices_to_render does not handle correctly grouped lists
        ch = []
        for group in self.choices:
            c = [c for c in group[1] if str(c[0]) in selected_choices]
            ch.extend(c)
        self.choices = ch
jpic commented 1 year ago

Dois it work better with Select2GroupListView ?

https://django-autocomplete-light.readthedocs.io/en/master/api.html#dal_select2.views.

j-bernard commented 1 year ago

I'm using Select2GroupListView to get the list of values to display but the problem is with the field widget.

My form field is as follow:

autocomplete.Select2ListChoiceField(label='',
                                    required=True,
                                    widget=LgrGroupedListSelect2(url='autocomplete-url',
                                                                 attrs={'data-allow-clear': 'false'}))

and autocomplete-url is a Select2GroupListView. If I replace LgrGroupedListSelect2 with autocomplete.ListSelect2 it will not display the groups correctly.