# -*- coding: utf-8 -*- from django.views.generic.edit import FormMixin from django.conf import settings from django.template.loader import render_to_string from haystack.query import SearchQuerySet from functions.custom_views import ContextMixin from functions.custom_views import ListView from functions.http import JsonResponse 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' _ajax_results_template_name = 'events/filter_listview_ajax.html' _ajax_form_template_name = 'includes/events/filter_form.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() # import pdb; pdb.set_trace() return qs def handle_ajax(request, *args, **kwargs): self.template_name = handle_ajax def get(self, request, *args, **kwargs): self.form = self.get_form(self.get_form_class()) self.extra_ctx['form'] = self.form self.template_name = self._template_name # ajax if request.is_ajax(): self.template_name = self._ajax_results_template_name data = { 'success': True, 'results': super(FilterListView, self).get(request, *args, **kwargs), 'form': render_to_string(self._ajax_form_template_name, {'form': self.form}), } return JsonResponse(data) # usual get return super(FilterListView, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(FilterListView, self).get_context_data(**kwargs) # get params for paginator get = self.request.GET.copy() if 'page' in get: del get['page'] self.context['GETparams'] = get.urlencode() return context