Source code for dal.views

"""Base views for autocomplete widgets."""

import json

from django.utils import six
from django.views.generic.list import BaseListView


[docs]class ViewMixin(object): """Common methods for autocomplete views. .. py:attribute:: forwarded Dict of field values that were forwarded from the form, may be used to filter autocompletion results based on the form state. See ``linked_data`` example for reference. """
[docs] def get(self, request, *args, **kwargs): """Wrap around get to set :py:attr:`forwarded`.""" self.forwarded = json.loads(request.GET.get('forward', '{}')) self.q = request.GET.get('q', '') return super(ViewMixin, self).get(request, *args, **kwargs)
[docs]class BaseQuerySetView(ViewMixin, BaseListView): """Base view to get results from a QuerySet.""" paginate_by = 10 context_object_name = 'results'
[docs] def has_more(self, context): """For widgets that have infinite-scroll feature.""" return context['page_obj'].has_next()
[docs] def get_result_value(self, result): """Return the value of a result.""" return result.pk
[docs] def get_result_label(self, result): """Return the label of a result.""" return six.text_type(result)
[docs] def get_queryset(self): """Filter the queryset with GET['q'].""" qs = super(BaseQuerySetView, self).get_queryset() if self.q: qs = qs.filter(name__icontains=self.q) return qs