summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py40
1 files changed, 31 insertions, 9 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index ed1c0c5bb..7526edcec 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -30,6 +30,7 @@ from django.db.models import (
ExpressionWrapper,
FloatField,
FileField,
+ Value
)
from django.db.models.fields import FieldDoesNotExist
from django.db.models.functions import ExtractYear
@@ -59,6 +60,7 @@ from ishtar_common.utils import (
CSV_OPTIONS,
get_all_field_names,
Round,
+ SplitPart,
PRIVATE_FIELDS,
)
from ishtar_common.models import get_current_profile, GeneralType, SearchAltName
@@ -1882,10 +1884,19 @@ def _get_json_stats(
value_keys = []
for stat in (stats_modality_1, stats_modality_2):
if not stat:
+ value_keys.append(stat)
continue
if stat.endswith("__year"):
q = q.annotate(**{stat: ExtractYear(stat[:-len("__year")])})
+ if "__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)
+ stats_modality_1, stats_modality_2 = value_keys
+ value_keys = [v for v in value_keys if v]
value_keys.append(stats_sum_variable)
q = q.values(*value_keys)
data = []
@@ -2457,6 +2468,26 @@ def get_item(
items = items.filter(base_query)
if exc_query:
items = items.exclude(exc_query)
+ stats_modality_1, stats_modality_2 = None, None
+ if data_type == "json-stats":
+ stats_modality_1 = request_items.get("stats_modality_1", None)
+ stats_modality_2 = request_items.get("stats_modality_2", None)
+ if (
+ not stats_modality_1
+ or stats_modality_1 not in model.STATISTIC_MODALITIES
+ ):
+ stats_modality_1 = model.STATISTIC_MODALITIES[0]
+ if stats_modality_2 not in model.STATISTIC_MODALITIES:
+ stats_modality_2 = None
+ if getattr(model, "STATISTIC_MODALITIES_QUERY", False):
+ if stats_modality_1 in model.STATISTIC_MODALITIES_QUERY and \
+ "query" in model.STATISTIC_MODALITIES_QUERY[stats_modality_1]:
+ items = items.filter(
+ **model.STATISTIC_MODALITIES_QUERY[stats_modality_1]["query"])
+ if stats_modality_2 in model.STATISTIC_MODALITIES_QUERY and \
+ "query" in model.STATISTIC_MODALITIES_QUERY[stats_modality_2]:
+ items = items.filter(
+ **model.STATISTIC_MODALITIES_QUERY[stats_modality_2]["query"])
for extra in extras:
items = items.extra(**extra)
@@ -2492,15 +2523,6 @@ def get_item(
dct["search_vector"] = search_vector
if data_type == "json-stats":
- stats_modality_1 = request_items.get("stats_modality_1", None)
- stats_modality_2 = request_items.get("stats_modality_2", None)
- if (
- not stats_modality_1
- or stats_modality_1 not in model.STATISTIC_MODALITIES
- ):
- stats_modality_1 = model.STATISTIC_MODALITIES[0]
- if stats_modality_2 not in model.STATISTIC_MODALITIES:
- stats_modality_2 = None
stats_sum_variable = request_items.get("stats_sum_variable", None)
stats_sum_variable_keys = list(model.STATISTIC_SUM_VARIABLE.keys())
if (