From a097a8c08c96f62fe7f8eae94df90a292537cb74 Mon Sep 17 00:00:00 2001 From: Tom Price Date: Tue, 4 Nov 2014 04:35:03 +0000 Subject: [PATCH] Added search and orderby features to people --- RIGS/templates/RIGS/person_list.html | 13 +++++++++++-- RIGS/templatetags/filters.py | 27 ++++++++++++++++++++++++++- RIGS/views.py | 13 +++++++++++++ templates/pagination.html | 11 ++++++----- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/RIGS/templates/RIGS/person_list.html b/RIGS/templates/RIGS/person_list.html index e42919a8..c7da422f 100644 --- a/RIGS/templates/RIGS/person_list.html +++ b/RIGS/templates/RIGS/person_list.html @@ -1,8 +1,10 @@ {% extends request.is_ajax|yesno:"base_ajax.html,base.html" %} {% load widget_tweaks %} {% load paginator from filters %} +{% load url_replace from filters %} +{% load orderby from filters %} -{% block title %}People list{% endblock %} +{% block title %}People{% endblock %} {% block content %}
@@ -13,6 +15,13 @@ +
+
+
+ +
+
+
{% paginator %}
@@ -20,7 +29,7 @@ - Name + Name Email Phone Notes diff --git a/RIGS/templatetags/filters.py b/RIGS/templatetags/filters.py index fe1f80cc..a6be41ae 100644 --- a/RIGS/templatetags/filters.py +++ b/RIGS/templatetags/filters.py @@ -40,6 +40,7 @@ def paginator(context, adjacent_pages=3): if n > 0 and n <= paginator.num_pages] dict = { + 'request': context['request'], 'is_paginated': paginator.num_pages > 0, 'page_obj': page, 'paginator': paginator, @@ -59,4 +60,28 @@ def paginator(context, adjacent_pages=3): dict['previous'] = page.previous_page_number() return dict -register.inclusion_tag('pagination.html', takes_context=True)(paginator) \ No newline at end of file +register.inclusion_tag('pagination.html', takes_context=True)(paginator) + +@register.simple_tag +def url_replace(request, field, value): + + dict_ = request.GET.copy() + + dict_[field] = value + + return dict_.urlencode() + +@register.simple_tag +def orderby(request, field, attr): + + dict_ = request.GET.copy() + + if dict_[field] == attr: + if not dict_[field].startswith("-"): + dict_[field] = "-" + attr + else: + dict_[field] = attr + else: + dict_[field] = attr + + return dict_.urlencode() \ No newline at end of file diff --git a/RIGS/views.py b/RIGS/views.py index 5cee7c30..2cf03ef0 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -1,6 +1,8 @@ from django.http.response import HttpResponseRedirect from django.core.urlresolvers import reverse_lazy from django.views import generic +from django.views.decorators.csrf import csrf_exempt +from django.db.models import Q from RIGS import models # Create your views here. @@ -28,6 +30,17 @@ class PersonIndex(generic.ListView): model = models.Person paginate_by = 20 + def get_queryset(self): + q = self.request.GET.get('q', "") + if len(q) >= 3: + object_list = self.model.objects.filter(Q(name__icontains=q) | Q(email__icontains=q)) + else: + object_list = self.model.objects.all() + orderBy = self.request.GET.get('orderBy', None) + if orderBy is not None: + object_list = object_list.order_by(orderBy) + return object_list + class PersonDetail(generic.DetailView): model = models.Person diff --git a/templates/pagination.html b/templates/pagination.html index d66ed14d..ebf0539b 100644 --- a/templates/pagination.html +++ b/templates/pagination.html @@ -1,14 +1,15 @@ {% if is_paginated %} + {% load url_replace from filters %}