Skip to content

Commit f6e6ba0

Browse files
54 - Complex Lookups
1 parent 85bcd4d commit f6e6ba0

File tree

3 files changed

+36
-10
lines changed

3 files changed

+36
-10
lines changed

src/blog/models.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.conf import settings
22
from django.db import models
3+
from django.db.models import Q
34
from django.utils import timezone
45
# Create your models here.
56

@@ -11,6 +12,18 @@ def published(self):
1112
now = timezone.now()
1213
return self.filter(publish_date__lte=now)
1314

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+
1427

1528
class BlogPostManager(models.Manager):
1629
def get_queryset(self):
@@ -19,6 +32,11 @@ def get_queryset(self):
1932
def published(self):
2033
return self.get_queryset().published()
2134

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+
2240

2341
class BlogPost(models.Model): # blogpost_set -> queryset
2442
# id = models.IntegerField() # pk

src/searches/templates/searches/view.html

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,24 @@
55

66
<div class='row'>
77
<div class='col-12 col-8 mx-auto'>
8-
{% if query %}
8+
{% if query %}
99

10-
<p class='lead'>You searched for {{ query }}</p>
11-
{% else %}
10+
<p class='lead'>You searched for {{ query }}</p>
11+
{% else %}
1212

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>
1717

18-
19-
{% endif %}
2018

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 %}
2126

2227

2328
</div>

src/searches/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.shortcuts import render
22

3+
from blog.models import BlogPost
34

45
from .models import SearchQuery
56

@@ -8,7 +9,9 @@ def search_view(request):
89
user = None
910
if request.user.is_authenticated:
1011
user = request.user
12+
context = {"query": query}
1113
if query is not None:
1214
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
1417
return render(request, 'searches/view.html',context)

0 commit comments

Comments
 (0)