Refactor code structure for improved readability and maintainability

This commit is contained in:
Ross
2026-05-18 12:17:44 +01:00
parent f3af6d47ee
commit 5614961980
4 changed files with 380 additions and 326 deletions
+27 -10
View File
@@ -617,20 +617,37 @@ class Case(models.Model, AuthorMixin, QuestionMixin):
cimar_uuid = models.CharField(max_length=255, null=True, blank=True)
def get_ordered_series_details(self):
# If the series are already prefetched, use them directly
if hasattr(self, '_prefetched_objects_cache') and 'series' in self._prefetched_objects_cache:
# Get the through model and sort by sort_order
through_model = self.series.through
# Build a mapping from series pk to through instance
through_objs = list(through_model.objects.filter(case=self).select_related('series'))
through_objs.sort(key=lambda x: x.sort_order)
cached = getattr(self, "_ordered_series_details_cache", None)
if cached is not None:
return cached
prefetched = getattr(self, "_prefetched_objects_cache", {})
if "seriesdetail_set" in prefetched:
through_objs = sorted(
list(prefetched["seriesdetail_set"]),
key=lambda item: item.sort_order,
)
self._ordered_series_details_cache = through_objs
return through_objs
# Otherwise, query as before
return self.series.through.objects.filter(case=self).select_related('series').order_by('sort_order')
through_objs = list(
self.series.through.objects
.filter(case=self)
.select_related("series")
.order_by("sort_order")
)
self._ordered_series_details_cache = through_objs
return through_objs
def get_ordered_series(self):
"""Returns the series in the case in order of the SeriesDetail sort_order"""
return [sd.series for sd in self.get_ordered_series_details()]
cached = getattr(self, "_ordered_series_cache", None)
if cached is not None:
return cached
ordered = [sd.series for sd in self.get_ordered_series_details()]
self._ordered_series_cache = ordered
return ordered
def get_app_name(self):
return "atlas"