# -*- coding: utf-8 -*- from django.views.generic.edit import FormMixin from django.conf import settings from django.template.loader import render_to_string from django.template import RequestContext 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 get(self, request, *args, **kwargs): self.form = self.get_form(self.get_form_class()) self.extra_ctx['form'] = self.form # ajax if request.is_ajax(): ctx = RequestContext(request, self.get_context_data(object_list=self.get_queryset())) data = { 'success': True, 'results': render_to_string(self._ajax_results_template_name, ctx), 'form': render_to_string(self._ajax_form_template_name, ctx), } 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'] context['GETparams'] = get.urlencode() return context