23
23
from django .db import DEFAULT_DB_ALIAS
24
24
25
25
from dojo .engagement .services import close_engagement , reopen_engagement
26
- from dojo .filters import EngagementFilter , EngagementDirectFilter , EngagementTestFilter
26
+ from dojo .filters import EngagementFilter , EngagementDirectFilter , EngagementTestFilter , ProductEngagementsFilter
27
27
from dojo .forms import CheckForm , \
28
28
UploadThreatForm , RiskAcceptanceForm , NoteForm , DoneForm , \
29
29
EngForm , TestForm , ReplaceRiskAcceptanceProofForm , AddFindingsRiskAcceptanceForm , DeleteEngagementForm , ImportScanForm , \
@@ -166,8 +166,9 @@ def engagements_all(request):
166
166
products_with_engagements = products_with_engagements .filter (~ Q (engagement = None )).distinct ()
167
167
168
168
# count using prefetch instead of just using 'engagement__set_test_test` to avoid loading all test in memory just to count them
169
+ engagement_query = Engagement .objects .annotate (test_count = Count ('test__id' ))
169
170
filter_qs = products_with_engagements .prefetch_related (
170
- Prefetch ('engagement_set' , queryset = Engagement . objects . all (). annotate ( test_count = Count ( 'test__id' )) )
171
+ Prefetch ('engagement_set' , queryset = ProductEngagementsFilter ( request . GET , engagement_query ). qs )
171
172
)
172
173
173
174
filter_qs = filter_qs .prefetch_related (
@@ -188,7 +189,7 @@ def engagements_all(request):
188
189
)
189
190
190
191
prods = get_page_items (request , filtered .qs , 25 )
191
-
192
+ prods . paginator . count = sum ( len ( prod . engagement_set . all ()) for prod in prods )
192
193
name_words = products_with_engagements .values_list ('name' , flat = True )
193
194
eng_words = get_authorized_engagements (Permissions .Engagement_View ).values_list ('name' , flat = True ).distinct ()
194
195
0 commit comments