@@ -228,10 +228,17 @@ def _get_all_projects_data(self):
228
228
superprojects__parent_id = main_project .id ,
229
229
)
230
230
for project in subprojects :
231
- version = self ._get_subproject_versions_queryset (
232
- main_version = main_version ,
231
+ version = self ._get_subproject_version (
232
+ version_slug = main_version . slug ,
233
233
subproject = project ,
234
- ).first ()
234
+ )
235
+ # Fallback to the default version of the subproject.
236
+ if not version and project .default_version :
237
+ version = self ._get_subproject_version (
238
+ version_slug = project .default_version ,
239
+ subproject = project ,
240
+ )
241
+
235
242
if version and self ._has_permission (self .request .user , version ):
236
243
url = project .get_docs_url (version_slug = version .slug )
237
244
projects_data [project .slug ] = VersionData (
@@ -243,12 +250,13 @@ def _get_all_projects_data(self):
243
250
setattr (self , cache_key , projects_data )
244
251
return projects_data
245
252
246
- def _get_subproject_versions_queryset (self , main_version , subproject ):
247
- """Get a queryset with the versions from the subproject that match `main_version` ."""
253
+ def _get_subproject_version (self , version_slug , subproject ):
254
+ """Get a version from the subproject."""
248
255
return (
249
256
Version .internal
250
257
.public (user = self .request .user , project = subproject , include_hidden = False )
251
- .filter (slug = main_version .slug )
258
+ .filter (slug = version_slug )
259
+ .first ()
252
260
)
253
261
254
262
def _has_permission (self , user , version ):
@@ -282,22 +290,20 @@ def get_queryset(self):
282
290
calling ``search.execute().hits``. This is why an DSL search object
283
291
is compatible with DRF's paginator.
284
292
"""
285
- filters = {}
286
- filters ['project' ] = list (self ._get_all_projects_data ().keys ())
287
- filters ['version' ] = self ._get_version ().slug
293
+ projects = {
294
+ project : version .slug
295
+ for project , version in self ._get_all_projects_data ().items ()
296
+ }
288
297
289
- # Check to avoid searching all projects in case these filters are empty.
290
- if not filters ['project' ]:
291
- log .info ('Unable to find a project to search' )
292
- return []
293
- if not filters ['version' ]:
298
+ # Check to avoid searching all projects in case it's empty.
299
+ if not projects :
294
300
log .info ('Unable to find a version to search' )
295
301
return []
296
302
297
303
query = self .request .query_params ['q' ]
298
304
queryset = PageSearch (
299
305
query = query ,
300
- filters = filters ,
306
+ projects = projects ,
301
307
user = self .request .user ,
302
308
# We use a permission class to control authorization
303
309
filter_by_user = False ,
0 commit comments