@@ -90,6 +90,9 @@ class LivelihoodZoneAdmin(admin.ModelAdmin):
9090 ]
9191 list_filter = (("country" , admin .RelatedOnlyFieldListFilter ),)
9292
93+ def get_queryset (self , request ):
94+ return super ().get_queryset (request ).select_related ("country" )
95+
9396
9497class LivelihoodZoneBaselineCorrectionAdmin (admin .ModelAdmin ):
9598 list_display = ("worksheet_name" , "cell_range" , "previous_value" , "value" , "correction_date" , "author" )
@@ -186,6 +189,17 @@ class LivelihoodZoneBaselineAdmin(GISModelAdminReadOnly):
186189 LivelihoodZoneBaselineCorrectionInlineAdmin ,
187190 ]
188191
192+ def get_queryset (self , request ):
193+ return (
194+ super ()
195+ .get_queryset (request )
196+ .select_related (
197+ "livelihood_zone__country" ,
198+ "main_livelihood_category" ,
199+ "source_organization" ,
200+ )
201+ )
202+
189203 @admin .display (description = _ ("Livelihood Zone Alternate Code" ))
190204 def livelihood_zone_alternate_code (self , instance ):
191205 """
@@ -269,6 +283,9 @@ def country(self, instance):
269283 """
270284 return instance .livelihood_zone_baseline .livelihood_zone .country
271285
286+ def get_queryset (self , request ):
287+ return super ().get_queryset (request ).select_related ("livelihood_zone_baseline__livelihood_zone__country" )
288+
272289 def get_fields (self , request , obj = None ):
273290 fields = super ().get_fields (request , obj = obj )
274291 if obj and obj .geography :
@@ -320,6 +337,18 @@ class LivelihoodStrategyAdmin(admin.ModelAdmin):
320337 ("livelihood_zone_baseline__livelihood_zone__country" , admin .RelatedOnlyFieldListFilter ),
321338 )
322339
340+ def get_queryset (self , request ):
341+ return (
342+ super ()
343+ .get_queryset (request )
344+ .select_related (
345+ "livelihood_zone_baseline__livelihood_zone" ,
346+ "season" ,
347+ "product" ,
348+ "unit_of_measure" ,
349+ )
350+ )
351+
323352
324353class WealthGroupCharacteristicValueInlineAdmin (admin .TabularInline ):
325354 fields = ["wealth_characteristic" , "value" , "min_value" , "max_value" ]
@@ -534,6 +563,9 @@ def get_fieldsets(self, request, obj=None):
534563 def get_queryset (self , request ):
535564 qs = super ().get_queryset (request )
536565 return qs .select_related (
566+ "wealth_group__community__livelihood_zone_baseline__livelihood_zone" ,
567+ "wealth_group__wealth_group_category" ,
568+ "wealth_group__livelihood_zone_baseline" ,
537569 "livelihood_strategy__product" ,
538570 "livelihood_strategy__season" ,
539571 "livelihood_zone_baseline__livelihood_zone__country" ,
@@ -655,7 +687,12 @@ def get_country_name(self, obj):
655687 def get_queryset (self , request ):
656688 qs = super ().get_queryset (request )
657689 return qs .select_related (
658- "wealth_group__livelihood_zone_baseline__livelihood_zone__country" , "product" , "unit_of_measure"
690+ "wealth_group__livelihood_zone_baseline__livelihood_zone__country" ,
691+ "wealth_group__community__livelihood_zone_baseline__livelihood_zone" ,
692+ "wealth_group__wealth_group_category" ,
693+ "wealth_characteristic" ,
694+ "product" ,
695+ "unit_of_measure" ,
659696 )
660697
661698 def get_wealth_characteristic_common_name (self , obj ):
@@ -934,6 +971,23 @@ def get_queryset(self, request):
934971 return super ().get_queryset (request ).filter (strategy_type = LivelihoodStrategyType .OTHER_PURCHASE )
935972
936973
974+ class CommunityRelatedOnlyFieldListFilter (admin .RelatedOnlyFieldListFilter ):
975+ """
976+ RelatedOnlyFieldListFilter for Community that prefetches livelihood_zone_baseline__livelihood_zone.
977+ To avoid the current excess repeated queries executed due to str(community)
978+ """
979+
980+ def field_choices (self , field , request , model_admin ):
981+ pk_qs = model_admin .get_queryset (request ).distinct ().values_list ("%s__pk" % self .field_path , flat = True )
982+ ordering = self .field_admin_ordering (field , request , model_admin )
983+ return [
984+ (community .pk , str (community ))
985+ for community in Community .objects .filter (pk__in = pk_qs )
986+ .select_related ("livelihood_zone_baseline__livelihood_zone" )
987+ .order_by (* ordering )
988+ ]
989+
990+
937991class WealthGroupAdmin (admin .ModelAdmin ):
938992 form = WealthGroupForm
939993 list_display = (
@@ -951,16 +1005,24 @@ class WealthGroupAdmin(admin.ModelAdmin):
9511005 "livelihood_zone_baseline__source_organization" ,
9521006 ("livelihood_zone_baseline__livelihood_zone__country" , admin .RelatedOnlyFieldListFilter ),
9531007 * translation_fields ("livelihood_zone_baseline__livelihood_zone__name" ),
954- ("community" , admin . RelatedOnlyFieldListFilter ),
1008+ ("community" , CommunityRelatedOnlyFieldListFilter ),
9551009 "wealth_group_category" ,
9561010 )
9571011 inlines = [
9581012 WealthGroupCharacteristicValueInlineAdmin ,
9591013 ] + [child for child in LivelihoodActivityInlineAdmin .__subclasses__ ()]
9601014
9611015 def get_queryset (self , request ):
962- queryset = super ().get_queryset (request ).prefetch_related ("livelihoodactivity_set" )
963- return queryset
1016+ return (
1017+ super ()
1018+ .get_queryset (request )
1019+ .select_related (
1020+ "community__livelihood_zone_baseline__livelihood_zone" ,
1021+ "wealth_group_category" ,
1022+ "livelihood_zone_baseline" ,
1023+ )
1024+ .prefetch_related ("livelihoodactivity_set" )
1025+ )
9641026
9651027
9661028class SeasonalActivityAdmin (admin .ModelAdmin ):
0 commit comments