Skip to content

Commit d6c89b4

Browse files
committed
Add missed LivelihoodZone to the model list for search see HEA-651
1 parent 7e36b95 commit d6c89b4

File tree

1 file changed

+71
-57
lines changed

1 file changed

+71
-57
lines changed

apps/baseline/viewsets.py

Lines changed: 71 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
import logging
2-
31
from django.apps import apps
42
from django.db import models
53
from django.db.models import F, OuterRef, Q, Subquery
64
from django.db.models.functions import Coalesce, NullIf
7-
from django.utils import translation
5+
from django.utils.translation import override
86
from django_filters import rest_framework as filters
97
from django_filters.filters import CharFilter
108
from rest_framework.permissions import AllowAny, DjangoModelPermissionsOrAnonReadOnly
@@ -96,8 +94,6 @@
9694
WildFoodGatheringSerializer,
9795
)
9896

99-
logger = logging.getLogger(__name__)
100-
10197

10298
class SourceOrganizationFilterSet(filters.FilterSet):
10399
class Meta:
@@ -1836,26 +1832,41 @@ def get_calculations_on_aggregates(self):
18361832

18371833

18381834
MODELS_TO_SEARCH = [
1839-
{"app_name": "common", "model_name": "ClassifiedProduct", "filter": ("product", "Product", "products")},
1835+
{
1836+
"app_name": "common",
1837+
"model_name": "ClassifiedProduct",
1838+
"filter": {"key": "product", "label": "Product", "category": "products"},
1839+
},
18401840
{
18411841
"app_name": "metadata",
18421842
"model_name": "LivelihoodCategory",
1843-
"filter": ("main_livelihood_category", "main_livelihood_category", "zone_types"),
1843+
"filter": {"key": "main_livelihood_category", "label": "Main Livelihood Category", "category": "zone_types"},
1844+
},
1845+
{
1846+
"app_name": "baseline",
1847+
"model_name": "LivelihoodZone",
1848+
"filter": {"key": "livelihood_zone", "label": "Livelihood zone", "category": "zones"},
18441849
},
18451850
{
18461851
"app_name": "metadata",
18471852
"model_name": "WealthCharacteristic",
1848-
"filter": ("wealth_characteristic", "Items", "items"),
1853+
"filter": {"key": "wealth_characteristic", "label": "Items", "category": "items"},
1854+
},
1855+
{
1856+
"app_name": "common",
1857+
"model_name": "Country",
1858+
"filter": {"key": "country", "label": "Country", "category": "countries"},
18491859
},
1850-
{"app_name": "common", "model_name": "Country", "filter": ("country", "Country", "countries")},
18511860
]
18521861

18531862

18541863
class LivelihoodBaselineFacetedSearch(APIView):
18551864
"""
1856-
Use a search term to find Livelihood Zone Baselines through various filters.
1865+
Performs a faceted search to find Livelihood Zone Baselines using a specified search term.
18571866
1858-
Returns faceted search results
1867+
The search applies to multiple related models, filtering results based on the configured
1868+
criteria for each model. For each matching result, it calculates the number of unique
1869+
livelihodd zones associated with the filter and includes relevant metadata in the response.
18591870
"""
18601871

18611872
renderer_classes = [JSONRenderer]
@@ -1879,54 +1890,57 @@ def get(self, request, format=None):
18791890
for model_entry in MODELS_TO_SEARCH:
18801891
app_name = model_entry["app_name"]
18811892
model_name = model_entry["model_name"]
1882-
filter, filter_label, filter_category = model_entry["filter"]
1893+
filter, filter_label, filter_category = (
1894+
model_entry["filter"]["key"],
1895+
model_entry["filter"]["label"],
1896+
model_entry["filter"]["category"],
1897+
)
18831898
ModelClass = apps.get_model(app_name, model_name)
18841899
search_per_model = ModelClass.objects.search(search_term)
18851900
results[filter_category] = []
1886-
1887-
translation.activate(language)
1888-
1889-
for search_result in search_per_model:
1890-
if model_name == "ClassifiedProduct":
1891-
unique_zones = (
1892-
LivelihoodStrategy.objects.filter(product=search_result)
1893-
.values("livelihood_zone_baseline")
1894-
.distinct()
1895-
.count()
1896-
)
1897-
value_label, value = search_result.description, search_result.pk
1898-
elif model_name == "LivelihoodCategory":
1899-
unique_zones = LivelihoodZoneBaseline.objects.filter(
1900-
main_livelihood_category=search_result
1901-
).count()
1902-
value_label, value = search_result.description, search_result.pk
1903-
elif model_name == "LivelihoodZone":
1904-
unique_zones = LivelihoodZoneBaseline.objects.filter(livelihood_zone=search_result).count()
1905-
value_label, value = search_result.name, search_result.pk
1906-
elif model_name == "WealthCharacteristic":
1907-
unique_zones = (
1908-
WealthGroupCharacteristicValue.objects.filter(wealth_characteristic=search_result)
1909-
.values("wealth_group__livelihood_zone_baseline")
1910-
.distinct()
1911-
.count()
1912-
)
1913-
value_label, value = search_result.description, search_result.pk
1914-
elif model_name == "Country":
1915-
unique_zones = (
1916-
LivelihoodZoneBaseline.objects.filter(livelihood_zone__country=search_result)
1917-
.distinct()
1918-
.count()
1919-
)
1920-
value_label, value = search_result.iso_en_name, search_result.pk
1921-
if unique_zones > 0:
1922-
results[filter_category].append(
1923-
{
1924-
"filter": filter,
1925-
"filter_label": filter_label,
1926-
"value_label": value_label,
1927-
"value": value,
1928-
"count": unique_zones,
1929-
}
1930-
)
1901+
# for activating language
1902+
with override(language):
1903+
for search_result in search_per_model:
1904+
if model_name == "ClassifiedProduct":
1905+
unique_zones = (
1906+
LivelihoodStrategy.objects.filter(product=search_result)
1907+
.values("livelihood_zone_baseline")
1908+
.distinct()
1909+
.count()
1910+
)
1911+
value_label, value = search_result.description, search_result.pk
1912+
elif model_name == "LivelihoodCategory":
1913+
unique_zones = LivelihoodZoneBaseline.objects.filter(
1914+
main_livelihood_category=search_result
1915+
).count()
1916+
value_label, value = search_result.description, search_result.pk
1917+
elif model_name == "LivelihoodZone":
1918+
unique_zones = LivelihoodZoneBaseline.objects.filter(livelihood_zone=search_result).count()
1919+
value_label, value = search_result.name, search_result.pk
1920+
elif model_name == "WealthCharacteristic":
1921+
unique_zones = (
1922+
WealthGroupCharacteristicValue.objects.filter(wealth_characteristic=search_result)
1923+
.values("wealth_group__livelihood_zone_baseline")
1924+
.distinct()
1925+
.count()
1926+
)
1927+
value_label, value = search_result.description, search_result.pk
1928+
elif model_name == "Country":
1929+
unique_zones = (
1930+
LivelihoodZoneBaseline.objects.filter(livelihood_zone__country=search_result)
1931+
.distinct()
1932+
.count()
1933+
)
1934+
value_label, value = search_result.iso_en_name, search_result.pk
1935+
if unique_zones > 0:
1936+
results[filter_category].append(
1937+
{
1938+
"filter": filter,
1939+
"filter_label": filter_label,
1940+
"value_label": value_label,
1941+
"value": value,
1942+
"count": unique_zones,
1943+
}
1944+
)
19311945

19321946
return Response(results)

0 commit comments

Comments
 (0)