Source code for dal_select2_queryset_sequence.views

"""View for a Select2 widget and QuerySetSequence-based business logic."""

from dal_queryset_sequence.views import BaseQuerySetSequenceView

from dal_select2.views import Select2ViewMixin

from django.template.defaultfilters import capfirst
from django.utils import six


[docs]class Select2QuerySetSequenceView(BaseQuerySetSequenceView, Select2ViewMixin): """ Combines support QuerySetSequence and Select2 in a single view. Example usage:: url( '^your-generic-autocomplete/$', autocomplete.Select2QuerySetSequenceView.as_view( queryset=autocomplete.QuerySetSequence( Group.objects.all(), TestModel.objects.all(), ) ), name='your-generic-autocomplete', ) It is compatible with the :py:mod:`~dal_select2_queryset_sequence.widgets` and the fields of :py:mod:`dal_contenttypes`, suits generic relation autocompletes. """
[docs] def get_results(self, context): """ Return a list of results usable by Select2. It will render as a list of one <optgroup> per different content type containing a list of one <option> per model. """ groups = {} for result in context['object_list']: groups.setdefault(type(result), []) groups[type(result)].append(result) return [{ 'id': None, 'text': capfirst(model._meta.verbose_name), 'children': [{ 'id': self.get_result_value(result), 'text': six.text_type(result), } for result in results] } for model, results in groups.items()]