Как применить пользовательскую функцию к определенному полю в нескольких запросах в Django

У меня есть простая модель

class Person(models.Model): name = models.CharField(max_length=20,default="")

когда я делаю Person.objects.all(), я получаю Queryset с 20 результатами

Я хочу применить пользовательскую функцию def foo(name): return "Hello" + str(name)

Я не хочу использовать никаких циклов есть ли какой-нибудь лучший метод, чтобы при запросе я получал непосредственно эти значения

Да, вы можете выполнять все виды функций на БД напрямую. Django предоставляет для этого API через Database Functions.

Вот как можно заархивировать ваш пример. Для этого мы будем использовать функцию Concat, которая позволяет нам конкатенировать строки. Нам также понадобится функция Value, которая позволяет нам предоставлять переменные Python непосредственно в БД. Наконец, мы используем функцию annotate для добавления вычисляемого поля в кверисет.

from django.db.models import Value
from django.db.models.functions import Concat

Person.objects.annotate(name_plus=Concat(Value("Hello"), "name"))
Вернуться на верх