Skip to content

Commit 7da4e24

Browse files
committed
Used joining instead of prefetching in Document.search()
The FK relationship between the models lends itself well to a select_related() instead of a prefetch_related(). Additionally, this gets around a bug in 5.2 (initial release).
1 parent 77f0200 commit 7da4e24

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

docs/models.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
)
1717
from django.core.cache import cache
1818
from django.db import models, transaction
19-
from django.db.models import Prefetch, Q
19+
from django.db.models import Q
2020
from django.db.models.fields.json import KeyTextTransform
2121
from django.utils.functional import cached_property
2222
from django.utils.html import strip_tags
@@ -269,15 +269,7 @@ def search(self, query_text, release):
269269
config=models.F("config"),
270270
)
271271
base_qs = (
272-
self.prefetch_related(
273-
Prefetch(
274-
"release",
275-
queryset=DocumentRelease.objects.only("lang", "release"),
276-
),
277-
Prefetch(
278-
"release__release", queryset=Release.objects.only("version")
279-
),
280-
)
272+
self.select_related("release__release")
281273
.filter(release_id=release.id)
282274
.annotate(
283275
headline=search("title", search_query),
@@ -295,7 +287,8 @@ def search(self, query_text, release):
295287
)
296288
.only(
297289
"path",
298-
"release",
290+
"release__lang",
291+
"release__release__version",
299292
)
300293
)
301294
vector_qs = (

docs/tests/test_models.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ def test_get_available_languages_by_version(self):
173173
class DocumentManagerTest(TestCase):
174174
@classmethod
175175
def setUpTestData(cls):
176-
cls.release = DocumentRelease.objects.create()
176+
cls.release = DocumentRelease.objects.create(
177+
release=Release.objects.create(version="1.2.3"),
178+
)
177179
cls.release_fr = DocumentRelease.objects.create(lang="fr")
178180
documents = [
179181
{
@@ -450,11 +452,13 @@ def test_search_highlight_stemmed(self):
450452

451453
def test_search_title(self):
452454
misspelled_query = Document.objects.search("viewss", self.release)
453-
with self.assertNumQueries(2):
455+
with self.assertNumQueries(1):
454456
self.assertQuerySetEqual(
455457
misspelled_query,
456-
["Generic views"],
457-
transform=attrgetter("headline"),
458+
[("Generic views", "en", "1.2.3")],
459+
transform=attrgetter(
460+
"headline", "release.lang", "release.release.version"
461+
),
458462
)
459463

460464

0 commit comments

Comments
 (0)