Refactor code structure for improved readability and maintainability
This commit is contained in:
+27
-10
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user