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.
75 lines
2.6 KiB
75 lines
2.6 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 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()
|
|
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
|
|
|