File tree Expand file tree Collapse file tree 2 files changed +26
-6
lines changed Expand file tree Collapse file tree 2 files changed +26
-6
lines changed Original file line number Diff line number Diff line change @@ -144,13 +144,11 @@ def prefetch_latest_build(self):
144
144
145
145
# Prefetch the latest build for each project.
146
146
subquery = Subquery (
147
- Build .internal .filter (project = OuterRef ("project_id" ))
148
- .order_by ("-date" )
149
- .values_list ("id" , flat = True )[:1 ]
147
+ Build .internal .filter (project = OuterRef ("project_id" )).order_by ("-date" ).values ("pk" )[:1 ]
150
148
)
151
149
latest_build = Prefetch (
152
150
"builds" ,
153
- Build .internal .filter (pk__in = subquery ),
151
+ Build .objects .filter (pk__in = subquery ). select_related ( "version" ),
154
152
to_attr = self .model .LATEST_BUILD_CACHE ,
155
153
)
156
154
return self .prefetch_related (latest_build )
Original file line number Diff line number Diff line change 1
1
from unittest import mock
2
2
3
- import pytest
4
3
from allauth .socialaccount .models import SocialAccount
5
- from django .conf import settings
6
4
from django .contrib .auth .models import User
7
5
from django .http .response import HttpResponseRedirect
8
6
from django .test import TestCase , override_settings
@@ -380,6 +378,30 @@ def setUp(self):
380
378
self .client .login (username = "eric" , password = "test" )
381
379
self .project = get (Project , slug = "pip" , users = [self .user ])
382
380
381
+ def test_dashboard_number_of_queries (self ):
382
+ for i in range (10 ):
383
+ project = get (
384
+ Project ,
385
+ slug = f"project-{ i } " ,
386
+ users = [self .user ],
387
+ )
388
+ version = project .versions .first ()
389
+ version .active = True
390
+ version .built = True
391
+ version .save ()
392
+ for _ in range (3 ):
393
+ get (
394
+ Build ,
395
+ project = project ,
396
+ version = version ,
397
+ success = True ,
398
+ state = BUILD_STATE_FINISHED ,
399
+ )
400
+
401
+ with self .assertNumQueries (24 ):
402
+ r = self .client .get (reverse (("projects_dashboard" )))
403
+ assert r .status_code == 200
404
+
383
405
def test_versions_page (self ):
384
406
self .project .versions .create (verbose_name = "1.0" )
385
407
You can’t perform that action at this time.
0 commit comments