# -*- coding: utf-8 -*- from django.views.generic.edit import FormMixin from django.conf import settings from haystack.query import SearchQuerySet from functions.custom_views import ContextMixin from functions.custom_views import ListView from exposition.models import Exposition from conference.models import Conference from .forms import FilterForm class FilterListView(ContextMixin, FormMixin, ListView): initial_ctx = {'filtering': True} form_class = FilterForm paginate_by = settings.CLIENT_PAGINATION _template_name = 'events/filter_listview.html' _template_name_ajax = 'events/filter_listview_ajax.html' def get_form_kwargs(self): kwargs = super(FilterListView, self).get_form_kwargs() kwargs.update({'data': self.request.GET}) return kwargs def get_queryset(self): if self.form.is_valid(): qs = self.form.filter() else: qs = self.form.default_filter() self.form.recalculate_choices() return qs def get(self, request, *args, **kwargs): self.form = self.get_form(self.get_form_class()) self.extra_ctx['form'] = self.form # get params for paginator get = request.GET.copy() if 'page' in get: del get[key] self.extra_ctx['GETparams'] = get.urlencode() # ajax or get self.template_name = self._template_name_ajax if request.is_ajax() else self._template_name return super(FilterListView, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.get(request, *args, **kwargs)