Аннотируйте список Django ModelAdmin без аннотирования запроса
Поэтому в течение долгого времени я делал аннотации в ModelAdmins для добавления сложных чисел и связанных с ними полей в списки администратора. Вот простой пример подсчета.
class MyClassAdmin(admin.ModelAdmin):
list_display [ .. 'capacity', ..]
def get_queryset(self, request):
return super(MyClassAdmin, self).get_queryset(request).annotate(
capacity=Count('spaces')
)
def capacity(self, obj):
return obj.capacity
На практике я делаю четыре или пять на некоторых ModelAdmins. Запрос медленнее, чем запрос на акции, но он быстрее, чем выполнение запросов 1+100, так как связанные данные извлекаются.
Тем не менее, Django делает запрос на подсчет в списках. Под столом вы увидите xxx modelnames
сообщение. Это генерируется из того же аннотированного запроса. Проверено с помощью Django Debug Toolbar. Я обнаружил, что в некоторых случаях любое сохранение от уменьшения количества запросов теряется для более сложного запроса подсчета.
Я знаю, переопределение get_queryset
позволяет фильтровать данные, но я не так их использую. Есть ли что-то лучшее, что я могу переопределить, что позволяет счетчику проходить без аннотации, но позволяет мне аннотировать отображение списка?