# -*- 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 ReverseOrderMixin 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() # import pdb; pdb.set_trace() else: qs = self.form.default_filter() if self.kwargs.get('with_form', True): self.form.recalculate_choices() # print(self.form.data, self.form.cleaned_data, self.form.get_date_begin_periods()) # 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} if kwargs.get('with_results', True): data.update({ 'results': render_to_string(self._ajax_results_template_name, ctx), }) if kwargs.get('with_form', True): data.update({ '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.form.data.copy() if 'page' in get: del get['page'] context['GETparams'] = get.urlencode() if hasattr(get, 'urlencode') else '' return context class FilterListView(ReverseOrderMixin, FilterListView_): pass