@@ -47,7 +47,7 @@ def get(self, request):
4747
4848 if request .GET :
4949 packages = self .request_to_queryset (request )
50- result_size = packages . count ( )
50+ result_size = len ( packages )
5151 page_no = int (request .GET .get ("page" , 1 ))
5252 packages = Paginator (packages , 50 ).get_page (page_no )
5353 context ["packages" ] = packages
@@ -69,9 +69,14 @@ def request_to_queryset(request):
6969 if len (request .GET ["name" ]):
7070 package_name = request .GET ["name" ]
7171
72- return models .Package .objects .all ().filter (
73- name__icontains = package_name ,
74- type__icontains = package_type ,
72+ return list (
73+ models .Package .objects .all ()
74+ .filter (name__icontains = package_name , type__icontains = package_type )
75+ .annotate (
76+ vulnerability_count = Count ("vulnerabilities" ),
77+ patched_vulnerability_count = Count ("resolved_vulnerabilities" ),
78+ )
79+ .prefetch_related ()
7580 )
7681
7782
@@ -118,9 +123,11 @@ def get_context_data(self, **kwargs):
118123 return context
119124
120125 def _package_vulnerabilities (self , package_pk ):
121-
122- resolved_vuln = [i for i in self .get_object ().resolved_to ]
123- unresolved_vuln = [i for i in self .get_object ().vulnerable_to ]
126+ # This can be further optimised by caching get_object result first time it
127+ # is called
128+ package = self .get_object ()
129+ resolved_vuln = [i for i in package .resolved_to .values ("vulnerability_id" , "pk" )]
130+ unresolved_vuln = [i for i in package .vulnerable_to .values ("vulnerability_id" , "pk" )]
124131
125132 return resolved_vuln , unresolved_vuln
126133
0 commit comments