diff options
Diffstat (limited to 'ishtar_common/views_item.py')
| -rw-r--r-- | ishtar_common/views_item.py | 40 | 
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 (  | 
