Как использовать процедуру DB из django ORM?
Например, в MySQL я бы написал:
SELECT id, my_calc(id, '2022-09-26') as calculated
FROM items;
Как мне сказать ORM использовать эту процедуру DB и передать параметры?
Должен ли я определить Func
?
Items.objects.annotate(calculated=...)
очевидно, через выражение Func. Подробнее здесь: https://docs.djangoproject.com/en/4.1/ref/models/expressions/#func-expressions
в вашем случае (postgres):
self.annotate(calculated=Func(F('id'), Value('2022-09-26), function='public.MY_CALC', output_field=CharField()))
Определите новую функцию:
from django.db.models import Func
class MyCalc(Func):
function = 'my_calc'
arity = 2 # requires 2 arguments
Используйте его:
from django.db.models import Value
Items.objects.annotate(calculated=MyCalc(F('id'), Value('2022-09-26'))