Вы можете сделать преобразование более эффективным и компактным, написав его следующим образом:
qs = Item.objects.filter(q).values('name', 'image_url').annotate(count=Count('name'))
sale_items = <b>map(update_url</b>, qs<b>)</b>
Не нужно .annotate(..)
полей, которые уже есть в наборе запросов, хотя это не так многоРазница в производительности запросак этой функции, но это не приведет к значительному улучшению.
Если вы не знаете реализацию функции create_presigned_url
и каким-то образом можете превратить это в выражение, используя всевозможные функции, такие как Concat
[Джанго-док] , Lower
[Джанго-док] и т. Д.
Вы не можетевыполнить обработку на уровне базы данных.Вы не можете передать функцию «черного ящика» в запросе и как-то надеяться, что ваша база данных понимает Python или что существует некоторый слой, который преобразует функцию в выражение SQL.Кроме того, база данных сама по себе не имеет всех средств для оценки всех функций, например, если вашему create_presigned_url
необходимо связаться с веб-сервером, это (вероятно) невозможно в вашей системе баз данных.