Added search to person, venue, organisation and event archive

This commit is contained in:
David Taylor
2015-08-02 23:54:29 +03:00
committed by Tom Price
parent e286d8bdee
commit 9db9902bb9
3 changed files with 104 additions and 33 deletions

View File

@@ -162,6 +162,14 @@ class EventArchive(generic.ArchiveIndexView):
date_field = "start_date" date_field = "start_date"
paginate_by = 25 paginate_by = 25
def get_context_data(self, **kwargs):
# get super context
context = super(EventArchive, self).get_context_data(**kwargs)
context['start'] = self.request.GET.get('start', None)
context['end'] = self.request.GET.get('end', datetime.date.today().strftime('%Y-%m-%d'))
return context
def get_queryset(self): def get_queryset(self):
start = self.request.GET.get('start', None) start = self.request.GET.get('start', None)
end = self.request.GET.get('end', datetime.date.today()) end = self.request.GET.get('end', datetime.date.today())
@@ -181,8 +189,29 @@ class EventArchive(generic.ArchiveIndexView):
else: else:
filter = Q(start_date__gte=start) filter = Q(start_date__gte=start)
if filter:
qs = self.model.objects.filter(filter).order_by('-start_date') q = self.request.GET.get('q', "")
qfilter = Q(pk__gte=0)
if q is not "":
qfilter = Q(name__icontains=q) | Q(description__icontains=q) | Q(notes__icontains=q)
#try and parse an int
try:
val = int(q)
qfilter = qfilter | Q(pk=val)
except: #not an integer
pass
try:
if q[0] == "N":
val = int(q[1:])
qfilter = Q(pk=val) #If string is N###### then do a simple PK filter
except:
pass
if filter or qfilter:
qs = self.model.objects.filter(filter & qfilter).order_by('-start_date')
else: else:
qs = self.model.objects.all().order_by('-start_date') qs = self.model.objects.all().order_by('-start_date')

View File

@@ -5,34 +5,49 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<h2>Event Archive</h2> <div class="col-sm-12">
<h2>Event Archive</h2>
<div class="col-sm-12 col-md-6 pagination"> </div>
<div class="col-sm-12">
<form class="form-inline"> <form class="form-inline">
<div class="form-group">
<label for="start">Start</label> <div class="input-group">
<input type="date" name="start" id="start" value="{{ request.GET.start }}" placeholder="Start" class="form-control" /> <div class="input-group-addon">Start</div>
<input type="date" name="start" id="start" value="{{ start|default_if_none:"" }}" placeholder="Start" class="form-control" />
</div> </div>
<div class="form-group">
<label for="end">End</label> <div class="input-group">
<input type="date" name="end" id="end" value="{% if request.GET.end %}{{ request.GET.end }}{% else %}{% now "Y-m-d" %}{% endif %}" placeholder="End" class="form-control" /> <div class="input-group-addon">End</div>
<input type="date" name="end" id="end" value="{{ end|default_if_none:"" }}" placeholder="End" class="form-control" />
</div> </div>
<div class="form-group">
<input type="submit" class="btn btn-primary" /> <div class="input-group">
<div class="input-group-addon">Keyword</div>
<input type="search" name="q" placeholder="Keyword" value="{{ request.GET.q }}"
class="form-control"/>
</div> </div>
<div class="input-group">
<input type="submit" class="btn btn-primary" value="Search"/>
</div>
</form> </form>
</div> </div>
{% if is_paginated %} <div class="col-sm-12">
<div class="col-md-6 text-right"> {% if is_paginated %}
{% paginator %} <div class="pull-right">
</div> {% paginator %}
{% endif %} </div>
{% endif %}
</div> </div>
<div class="row"> <div class="row">
{% with latest as events %} <div class="col-sm-12">
{% include 'RIGS/event_table.html' %} {% with event_list as events %}
{% endwith %} {% include 'RIGS/event_table.html' %}
{% endwith %}
</div>
</div> </div>
{% if is_paginated %} {% if is_paginated %}

View File

@@ -53,10 +53,19 @@ class PersonList(generic.ListView):
def get_queryset(self): def get_queryset(self):
q = self.request.GET.get('q', "") q = self.request.GET.get('q', "")
if len(q) >= 3:
object_list = self.model.objects.filter(Q(name__icontains=q) | Q(email__icontains=q)) filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q(phone__startswith=q) | Q(phone__endswith=q)
else:
object_list = self.model.objects.all() #try and parse an int
try:
val = int(q)
filter = filter | Q(pk=val)
except:
#not an integer
pass
object_list = self.model.objects.filter(filter)
orderBy = self.request.GET.get('orderBy', None) orderBy = self.request.GET.get('orderBy', None)
if orderBy is not None: if orderBy is not None:
object_list = object_list.order_by(orderBy) object_list = object_list.order_by(orderBy)
@@ -107,10 +116,19 @@ class OrganisationList(generic.ListView):
def get_queryset(self): def get_queryset(self):
q = self.request.GET.get('q', "") q = self.request.GET.get('q', "")
if len(q) >= 3:
object_list = self.model.objects.filter(Q(name__icontains=q) | Q(address__icontains=q)) filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q(phone__startswith=q) | Q(phone__endswith=q)
else:
object_list = self.model.objects.all() #try and parse an int
try:
val = int(q)
filter = filter | Q(pk=val)
except:
#not an integer
pass
object_list = self.model.objects.filter(filter)
orderBy = self.request.GET.get('orderBy', "") orderBy = self.request.GET.get('orderBy', "")
if orderBy is not "": if orderBy is not "":
object_list = object_list.order_by(orderBy) object_list = object_list.order_by(orderBy)
@@ -161,10 +179,19 @@ class VenueList(generic.ListView):
def get_queryset(self): def get_queryset(self):
q = self.request.GET.get('q', "") q = self.request.GET.get('q', "")
if len(q) >= 3:
object_list = self.model.objects.filter(Q(name__icontains=q) | Q(address__icontains=q)) filter = Q(name__icontains=q) | Q(email__icontains=q) | Q(address__icontains=q) | Q(notes__icontains=q) | Q(phone__startswith=q) | Q(phone__endswith=q)
else:
object_list = self.model.objects.all() #try and parse an int
try:
val = int(q)
filter = filter | Q(pk=val)
except:
#not an integer
pass
object_list = self.model.objects.filter(filter)
orderBy = self.request.GET.get('orderBy', "") orderBy = self.request.GET.get('orderBy', "")
if orderBy is not "": if orderBy is not "":
object_list = object_list.order_by(orderBy) object_list = object_list.order_by(orderBy)