3
3
4
4
import operator
5
5
6
+ from django .http import Http404
6
7
from django .utils .translation import ugettext_lazy as _
7
8
from django .shortcuts import render
8
9
from django .core .paginator import Paginator , Page , EmptyPage , PageNotAnInteger
9
10
from django import forms
10
11
11
12
from crispy_forms import helper
12
13
14
+ from elasticsearch import TransportError
13
15
from elasticsearch_dsl .query import Q
14
16
15
17
from .models import Author , Book
@@ -26,6 +28,10 @@ class SearchForm(forms.Form):
26
28
label = _ ("Title" ),
27
29
required = False ,
28
30
)
31
+ isbn = forms .CharField (
32
+ label = _ ("ISBN" ),
33
+ required = False ,
34
+ )
29
35
authors = forms .ModelMultipleChoiceField (
30
36
label = _ ("Authors" ),
31
37
queryset = Author .objects .all (),
@@ -64,6 +70,10 @@ def book_list(request):
64
70
if title :
65
71
search = search .query ("fuzzy" , title = title )
66
72
73
+ isbn = form .cleaned_data ['isbn' ]
74
+ if isbn :
75
+ search = search .query ("match" , isbn = isbn )
76
+
67
77
authors = form .cleaned_data ['authors' ]
68
78
if authors :
69
79
author_queries = []
@@ -88,13 +98,16 @@ def book_list(request):
88
98
paginator = Paginator (search_results , paginate_by )
89
99
page_number = request .GET .get ("page" )
90
100
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.' )
98
111
99
112
context = {
100
113
'object_list' : page ,
0 commit comments