@@ -252,24 +252,41 @@ class Meta:
252252
253253 @extend_schema_field (MiniOperationalUpdateActiveSerializer (many = True ))
254254 def get_operational_update_details (self , obj ):
255- queryset = DrefOperationalUpdate .objects .filter (dref_id = obj .id ).order_by ("-created_at" )
255+ prefetched = getattr (obj , "prefetched_operational_updates" , None )
256+ queryset = prefetched if prefetched is not None else obj .drefoperationalupdate_set .order_by ("-created_at" )
256257 return MiniOperationalUpdateActiveSerializer (queryset , many = True ).data
257258
258259 @extend_schema_field (MiniDrefFinalReportActiveSerializer )
259260 def get_final_report_details (self , obj ):
260- queryset = DrefFinalReport .objects .filter (dref_id = obj .id ).first ()
261- return MiniDrefFinalReportActiveSerializer (queryset ).data
261+ prefetched = getattr (obj , "prefetched_final_report" , None )
262+ if prefetched is not None :
263+ if isinstance (prefetched , list ):
264+ final_report = prefetched [0 ] if prefetched else None
265+ else :
266+ final_report = prefetched
267+ else :
268+ try :
269+ final_report = obj .dreffinalreport
270+ except DrefFinalReport .DoesNotExist :
271+ final_report = None
272+ if final_report is None :
273+ return None
274+ return MiniDrefFinalReportActiveSerializer (final_report ).data
262275
263276 def get_has_ops_update (self , obj ) -> bool :
264- op_count_count = obj . drefoperationalupdate_set . count ( )
265- if op_count_count > 0 :
266- return True
267- return False
277+ prefetched = getattr ( obj , "prefetched_operational_updates" , None )
278+ if prefetched is not None :
279+ return len ( prefetched ) > 0
280+ return obj . drefoperationalupdate_set . exists ()
268281
269282 def get_has_final_report (self , obj ) -> bool :
270- if hasattr (obj , "dreffinalreport" ):
271- return True
272- return False
283+ prefetched = getattr (obj , "prefetched_final_report" , None )
284+ if prefetched is not None :
285+ return bool (prefetched )
286+ try :
287+ return obj .dreffinalreport is not None
288+ except DrefFinalReport .DoesNotExist :
289+ return False
273290
274291 def get_application_type (self , obj ) -> str :
275292 return "DREF"
@@ -278,10 +295,28 @@ def get_application_type_display(self, obj) -> str:
278295 return gettext ("DREF application" )
279296
280297 def get_unpublished_op_update_count (self , obj ) -> int :
298+ prefetched = getattr (obj , "prefetched_operational_updates" , None )
299+ if prefetched is not None :
300+ return sum (1 for op in prefetched if op .status != Dref .Status .APPROVED )
281301 return DrefOperationalUpdate .objects .filter (dref_id = obj .id ).exclude (status = Dref .Status .APPROVED ).count ()
282302
283303 def get_unpublished_final_report_count (self , obj ) -> int :
284- return DrefFinalReport .objects .filter (dref_id = obj .id ).exclude (status = Dref .Status .APPROVED ).count ()
304+ prefetched = getattr (obj , "prefetched_final_report" , None )
305+ if prefetched is not None :
306+ if isinstance (prefetched , list ):
307+ if not prefetched :
308+ return 0
309+ final_report = prefetched [0 ]
310+ else :
311+ final_report = prefetched
312+ if final_report is None :
313+ return 0
314+ return 0 if final_report .status == Dref .Status .APPROVED else 1
315+ try :
316+ final_report = obj .dreffinalreport
317+ except DrefFinalReport .DoesNotExist :
318+ return 0
319+ return 0 if final_report .status == Dref .Status .APPROVED else 1
285320
286321
287322class PlannedInterventionSerializer (
0 commit comments