From caa6d9bdead4783e5eac0a45d5b60ed86d54df45 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 12 Jan 2026 16:49:45 +0100 Subject: 🐛 fix statistic evaluation for last modified and top container MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/utils.py | 3 ++- ishtar_common/views_item.py | 16 +++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'ishtar_common') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 23fe5b1a9..57d83c22c 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -65,7 +65,7 @@ from django.core.files import File from django.core.files.storage import FileSystemStorage from django.core.validators import EMPTY_VALUES, MaxValueValidator from django.db import models -from django.db.models import Func, Q +from django.db.models import Func, Q, TextField from django.db.models.functions import Length from django.http import HttpResponseRedirect from django.urls import reverse, NoReverseMatch @@ -198,6 +198,7 @@ class SplitPart(Func): PostgreSQL split part annotation """ function = 'split_part' + output_field = TextField() arity = 3 diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 7526edcec..0fe65356b 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1843,8 +1843,14 @@ def _get_json_stats_optimized( for stat in (stats_modality_1, stats_modality_2): if not stat: continue - if stat.endswith("__year"): - q = q.annotate(**{stat: ExtractYear(stat[: -len("__year")])}) + if stat.endswith("__FILTERyear"): + q = q.annotate(**{stat: ExtractYear(stat[:-len("__FILTERyear")])}) + elif "__splitpart_" in stat: + st, args = stat.split("__splitpart_") + sep, index = args.split("_") + index = int(index) + stat = f"{st}_modality" + q = q.annotate(**{stat: SplitPart(F(st), Value(sep), index)}) value_keys.append(stat) q = q.values(*value_keys) if stats_sum_variable == "pk": @@ -1886,9 +1892,9 @@ def _get_json_stats( if not stat: value_keys.append(stat) continue - if stat.endswith("__year"): - q = q.annotate(**{stat: ExtractYear(stat[:-len("__year")])}) - if "__splitpart_" in stat: + if stat.endswith("__FILTERyear"): + q = q.annotate(**{stat: ExtractYear(stat[:-len("__FILTERyear")])}) + elif "__splitpart_" in stat: st, args = stat.split("__splitpart_") sep, index = args.split("_") index = int(index) -- cgit v1.2.3