Как использовать процедуру 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'))
Вернуться на верх