File tree Expand file tree Collapse file tree 3 files changed +36
-10
lines changed Expand file tree Collapse file tree 3 files changed +36
-10
lines changed Original file line number Diff line number Diff line change 1
1
from django .conf import settings
2
2
from django .db import models
3
+ from django .db .models import Q
3
4
from django .utils import timezone
4
5
# Create your models here.
5
6
@@ -11,6 +12,18 @@ def published(self):
11
12
now = timezone .now ()
12
13
return self .filter (publish_date__lte = now )
13
14
15
+ def search (self , query ):
16
+ lookup = (
17
+ Q (title__icontains = query ) |
18
+ Q (content__icontains = query ) |
19
+ Q (slug__icontains = query ) |
20
+ Q (user__first_name__icontains = query ) |
21
+ Q (user__last_name__icontains = query ) |
22
+ Q (user__username__icontains = query )
23
+ )
24
+
25
+ return self .filter (lookup )
26
+
14
27
15
28
class BlogPostManager (models .Manager ):
16
29
def get_queryset (self ):
@@ -19,6 +32,11 @@ def get_queryset(self):
19
32
def published (self ):
20
33
return self .get_queryset ().published ()
21
34
35
+ def search (self , query = None ):
36
+ if query is None :
37
+ return self .get_queryset ().none ()
38
+ return self .get_queryset ().published ().search (query )
39
+
22
40
23
41
class BlogPost (models .Model ): # blogpost_set -> queryset
24
42
# id = models.IntegerField() # pk
Original file line number Diff line number Diff line change 5
5
6
6
< div class ='row '>
7
7
< div class ='col-12 col-8 mx-auto '>
8
- {% if query %}
8
+ {% if query %}
9
9
10
- < p class ='lead '> You searched for {{ query }}</ p >
11
- {% else %}
10
+ < p class ='lead '> You searched for {{ query }}</ p >
11
+ {% else %}
12
12
13
- < form class ="form-inline my-2 my-lg-0 " action ='/search/ '>
14
- < input class ="form-control mr-sm-2 " type ="search " name ='q ' placeholder ="Search " aria-label ="Search ">
15
- < button class ="btn btn-outline-success my-2 my-sm-0 " type ="submit "> Search</ button >
16
- </ form >
13
+ < form class ="form-inline my-2 my-lg-0 " action ='/search/ '>
14
+ < input class ="form-control mr-sm-2 " type ="search " name ='q ' placeholder ="Search " aria-label ="Search ">
15
+ < button class ="btn btn-outline-success my-2 my-sm-0 " type ="submit "> Search</ button >
16
+ </ form >
17
17
18
-
19
- {% endif %}
20
18
19
+ {% endif %}
20
+
21
+
22
+ {% for blog_item in blog_list %}
23
+
24
+ {% include 'blog/list-inline.html' with blog_post=blog_item truncate=True detail=False %}
25
+ {% endfor %}
21
26
22
27
23
28
</ div >
Original file line number Diff line number Diff line change 1
1
from django .shortcuts import render
2
2
3
+ from blog .models import BlogPost
3
4
4
5
from .models import SearchQuery
5
6
@@ -8,7 +9,9 @@ def search_view(request):
8
9
user = None
9
10
if request .user .is_authenticated :
10
11
user = request .user
12
+ context = {"query" : query }
11
13
if query is not None :
12
14
SearchQuery .objects .create (user = user , query = query )
13
- context = {"query" : query }
15
+ blog_list = BlogPost .objects .search (query = query )
16
+ context ['blog_list' ] = blog_list
14
17
return render (request , 'searches/view.html' ,context )
You can’t perform that action at this time.
0 commit comments