33
44import operator
55
6+ from django .http import Http404
67from django .utils .translation import ugettext_lazy as _
78from django .shortcuts import render
89from django .core .paginator import Paginator , Page , EmptyPage , PageNotAnInteger
910from django import forms
1011
1112from crispy_forms import helper
1213
14+ from elasticsearch import TransportError
1315from elasticsearch_dsl .query import Q
1416
1517from .models import Author , Book
@@ -26,6 +28,10 @@ class SearchForm(forms.Form):
2628 label = _ ("Title" ),
2729 required = False ,
2830 )
31+ isbn = forms .CharField (
32+ label = _ ("ISBN" ),
33+ required = False ,
34+ )
2935 authors = forms .ModelMultipleChoiceField (
3036 label = _ ("Authors" ),
3137 queryset = Author .objects .all (),
@@ -64,6 +70,10 @@ def book_list(request):
6470 if title :
6571 search = search .query ("fuzzy" , title = title )
6672
73+ isbn = form .cleaned_data ['isbn' ]
74+ if isbn :
75+ search = search .query ("match" , isbn = isbn )
76+
6777 authors = form .cleaned_data ['authors' ]
6878 if authors :
6979 author_queries = []
@@ -88,13 +98,16 @@ def book_list(request):
8898 paginator = Paginator (search_results , paginate_by )
8999 page_number = request .GET .get ("page" )
90100 try :
91- page = paginator .page (page_number )
92- except PageNotAnInteger :
93- # If page parameter is not an integer, show first page.
94- page = paginator .page (1 )
95- except EmptyPage :
96- # If page parameter is out of range, show last existing page.
97- page = paginator .page (paginator .num_pages )
101+ try :
102+ page = paginator .page (page_number )
103+ except PageNotAnInteger :
104+ # If page parameter is not an integer, show first page.
105+ page = paginator .page (1 )
106+ except EmptyPage :
107+ # If page parameter is out of range, show last existing page.
108+ page = paginator .page (paginator .num_pages )
109+ except TransportError :
110+ raise Http404 ('Index does not exist. Run `python manage.py search_index --rebuild` to create it.' )
98111
99112 context = {
100113 'object_list' : page ,
0 commit comments