You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

80 lines
2.8 KiB

# -*- 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