@@ -2097,6 +2097,18 @@ class LivelihoodZoneBaselineFacetedSearchView(APIView):
20972097 renderer_classes = [JSONRenderer ]
20982098 permission_classes = [AllowAny ]
20992099
2100+ def _get_baselines (self , baselines_qs ):
2101+ # returs a list of baseline dicts with id, name, livelihood_zone__code, reference_year_end_date.
2102+ return [
2103+ {
2104+ "id" : baseline .id ,
2105+ "name" : baseline .name ,
2106+ "livelihood_zone__code" : baseline .livelihood_zone .code ,
2107+ "reference_year_end_date" : baseline .reference_year_end_date ,
2108+ }
2109+ for baseline in baselines_qs .select_related ("livelihood_zone" )
2110+ ]
2111+
21002112 def _search_products (self , search_term ):
21012113 # Search products using icontains for broader matching than the default iexact search.
21022114 q_object = Q ()
@@ -2132,44 +2144,42 @@ def get(self, request, format=None):
21322144 with override (language ):
21332145 for search_result in search_per_model :
21342146 if model_name == "ClassifiedProduct" :
2135- unique_zones = (
2136- LivelihoodStrategy .objects .filter (product = search_result )
2137- .values ("livelihood_zone_baseline" )
2138- .distinct ()
2139- .count ()
2140- )
2147+ baselines_qs = LivelihoodZoneBaseline .objects .filter (
2148+ id__in = LivelihoodStrategy .objects .filter (product = search_result ).values (
2149+ "livelihood_zone_baseline"
2150+ )
2151+ ).distinct ()
21412152 value_label , value = search_result .description , search_result .pk
21422153 elif model_name == "LivelihoodCategory" :
2143- unique_zones = LivelihoodZoneBaseline .objects .filter (
2154+ baselines_qs = LivelihoodZoneBaseline .objects .filter (
21442155 main_livelihood_category = search_result
2145- ). count ()
2156+ )
21462157 value_label , value = search_result .description , search_result .pk
21472158 elif model_name == "LivelihoodZone" :
2148- unique_zones = LivelihoodZoneBaseline .objects .filter (livelihood_zone = search_result ). count ( )
2159+ baselines_qs = LivelihoodZoneBaseline .objects .filter (livelihood_zone = search_result )
21492160 value_label , value = search_result .name , search_result .pk
21502161 elif model_name == "WealthCharacteristic" :
2151- unique_zones = (
2152- WealthGroupCharacteristicValue .objects .filter (wealth_characteristic = search_result )
2153- .values ("wealth_group__livelihood_zone_baseline" )
2154- .distinct ()
2155- .count ()
2156- )
2162+ baselines_qs = LivelihoodZoneBaseline .objects .filter (
2163+ id__in = WealthGroupCharacteristicValue .objects .filter (
2164+ wealth_characteristic = search_result
2165+ ).values ("wealth_group__livelihood_zone_baseline" )
2166+ ).distinct ()
21572167 value_label , value = search_result .description , search_result .pk
21582168 elif model_name == "Country" :
2159- unique_zones = (
2160- LivelihoodZoneBaseline .objects .filter (livelihood_zone__country = search_result )
2161- .distinct ()
2162- .count ()
2163- )
2169+ baselines_qs = LivelihoodZoneBaseline .objects .filter (
2170+ livelihood_zone__country = search_result
2171+ ).distinct ()
21642172 value_label , value = search_result .iso_en_name , search_result .pk
2165- if unique_zones > 0 :
2173+ baselines = self ._get_baselines (baselines_qs )
2174+ if baselines :
21662175 results [filter_category ].append (
21672176 {
21682177 "filter" : filter_key ,
21692178 "filter_label" : filter_label ,
21702179 "value_label" : value_label ,
21712180 "value" : value ,
2172- "count" : unique_zones ,
2181+ "count" : len (baselines ),
2182+ "livelihood_zone_baselines" : baselines ,
21732183 }
21742184 )
21752185
@@ -2189,20 +2199,21 @@ def get(self, request, format=None):
21892199 or search_lower in english_labels [strategy_type .value ]
21902200 or search_lower in translated_label .lower ()
21912201 ):
2192- unique_zones = (
2193- LivelihoodStrategy .objects .filter (strategy_type = strategy_type .value )
2194- . values ( "livelihood_zone_baseline" )
2195- . distinct ( )
2196- . count ()
2197- )
2198- if unique_zones > 0 :
2202+ baselines_qs = LivelihoodZoneBaseline . objects . filter (
2203+ id__in = LivelihoodStrategy .objects .filter (strategy_type = strategy_type .value ). values (
2204+ "livelihood_zone_baseline"
2205+ )
2206+ ). distinct ()
2207+ baselines = self . _get_baselines ( baselines_qs )
2208+ if baselines :
21992209 results ["livelihood_strategy_types" ].append (
22002210 {
22012211 "filter" : "strategy_type" ,
22022212 "filter_label" : "Livelihood Strategy Type" ,
22032213 "value_label" : translated_label ,
22042214 "value" : strategy_type .value ,
2205- "count" : unique_zones ,
2215+ "count" : len (baselines ),
2216+ "livelihood_zone_baselines" : baselines ,
22062217 }
22072218 )
22082219
0 commit comments