Skip to content

Commit 61b600b

Browse files
committed
Update metadata and baseline admins with select_realted and other performance improvements see HEA-1031
1 parent b4cf9e2 commit 61b600b

2 files changed

Lines changed: 75 additions & 4 deletions

File tree

apps/baseline/admin.py

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9497
class 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

324353
class 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+
937991
class 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

9661028
class SeasonalActivityAdmin(admin.ModelAdmin):

apps/metadata/admin.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ class SeasonAdmin(admin.ModelAdmin):
154154
)
155155
ordering = ("country", "order")
156156

157+
def get_queryset(self, request):
158+
return super().get_queryset(request).select_related("country")
159+
157160

158161
class MarketAdmin(ReferenceDataAdmin):
159162
fields = (
@@ -206,6 +209,9 @@ class ActivityLabelAdmin(admin.ModelAdmin):
206209
"attribute",
207210
)
208211

212+
def get_queryset(self, request):
213+
return super().get_queryset(request).select_related("product", "unit_of_measure")
214+
209215

210216
class WealthCharacteristicLabelAdmin(admin.ModelAdmin):
211217
fields = (
@@ -235,6 +241,9 @@ class WealthCharacteristicLabelAdmin(admin.ModelAdmin):
235241
"wealth_characteristic",
236242
)
237243

244+
def get_queryset(self, request):
245+
return super().get_queryset(request).select_related("wealth_characteristic", "product", "unit_of_measure")
246+
238247

239248
admin.site.register(LivelihoodCategory, LivelihoodCategoryAdmin)
240249
admin.site.register(WealthGroupCategory, WealthGroupCategoryAdmin)

0 commit comments

Comments
 (0)