У меня проблема с SQL оптимизацией запросов для настраиваемого поля list_display "баланс". Для получения баланса счета запрос выполняется для каждой строки. Как избежать этого и исправить количество запросов? Я пытаюсь использовать prefetch_related
, но это не имеет никаких эффектов.
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
fields = [
'username',
'password',
'last_name',
'first_name',
'middle_name',
'groups'
]
list_display = [
'username_',
'person_name',
'balance',
]
def balance(self, obj):
balance = obj.person.customer.customeraccount_set.first().account.balance
return balance
balance.allow_tags = True
balance.short_description = 'Balance'
def get_queryset(self, request):
qs = super().get_queryset(request).prefetch_related(
Prefetch('person__customer__customeraccount_set__account', queryset=CustomerAccount.objects.all()),
'person', 'person__customer', 'person__customer__customeraccount_set',
).filter(groups__name='водитель')
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
Экран из панели инструментов отладки: 