@@ -252,24 +252,36 @@ 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+ final_report = prefetched [0 ] if prefetched else None
264+ else :
265+ try :
266+ final_report = obj .dreffinalreport
267+ except DrefFinalReport .DoesNotExist :
268+ final_report = None
269+ return MiniDrefFinalReportActiveSerializer (final_report ).data
262270
263271 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
272+ prefetched = getattr ( obj , "prefetched_operational_updates" , None )
273+ if prefetched is not None :
274+ return len ( prefetched ) > 0
275+ return obj . drefoperationalupdate_set . exists ()
268276
269277 def get_has_final_report (self , obj ) -> bool :
270- if hasattr (obj , "dreffinalreport" ):
271- return True
272- return False
278+ prefetched = getattr (obj , "prefetched_final_report" , None )
279+ if prefetched is not None :
280+ return bool (prefetched )
281+ try :
282+ return obj .dreffinalreport is not None
283+ except DrefFinalReport .DoesNotExist :
284+ return False
273285
274286 def get_application_type (self , obj ) -> str :
275287 return "DREF"
@@ -278,10 +290,23 @@ def get_application_type_display(self, obj) -> str:
278290 return gettext ("DREF application" )
279291
280292 def get_unpublished_op_update_count (self , obj ) -> int :
293+ prefetched = getattr (obj , "prefetched_operational_updates" , None )
294+ if prefetched is not None :
295+ return sum (1 for op in prefetched if op .status != Dref .Status .APPROVED )
281296 return DrefOperationalUpdate .objects .filter (dref_id = obj .id ).exclude (status = Dref .Status .APPROVED ).count ()
282297
283298 def get_unpublished_final_report_count (self , obj ) -> int :
284- return DrefFinalReport .objects .filter (dref_id = obj .id ).exclude (status = Dref .Status .APPROVED ).count ()
299+ prefetched = getattr (obj , "prefetched_final_report" , None )
300+ if prefetched is not None :
301+ if not prefetched :
302+ return 0
303+ final_report = prefetched [0 ]
304+ return 0 if final_report .status == Dref .Status .APPROVED else 1
305+ try :
306+ final_report = obj .dreffinalreport
307+ except DrefFinalReport .DoesNotExist :
308+ return 0
309+ return 0 if final_report .status == Dref .Status .APPROVED else 1
285310
286311
287312class PlannedInterventionSerializer (
0 commit comments