Django - Запрос с дополнительным методом, использующим python Function

Я хочу сделать запрос в Django, который использует функцию, принимающую параметры из db e из программы на python. Функция показана ниже:

> def myFunc(a, b):
>     val = mathematical expression with a and b
>     return val

Мне бы этого хотелось:

  • a приходит из myTable (представляет поле 'num')
  • b приходит из python Code
class myTable(models.Model):
   num = models.IntegerField(default=0)

Я хотел бы сделать запрос, подобный этому, в файле views.py:

b = 4     #it must be variable
c = 10    #it must be variable
myTable.objects.all().extra(select = {'new_param' : myFunc(num , b)}, where = ['new_param > %d'], params = [c]) 

Как я могу это сделать? Спасибо

Вам нужно изменить вашу функцию, чтобы она была аннотацией, используя функции базы данных, потому что вы не можете передать произвольный код python в запросе для выполнения на базе данных. Что-то вроде следующего должно быть близко к выражению в вашем комментарии, хотя его немного трудно читать и оно немного сложное

from django.db.models import F, Value
from django.db.models.functions import Cos, Sin, Abs, Power, Sqrt, ASin
b = 4
c = 10
myTable.objects.annotate(
    new_param=ASin(Sqrt(Power(Cos(F('num')) * Sin(Abs(Value(b) - F('num')))), Value(2)) + Value(1))
).filter(new_param__gt=c)
Вернуться на верх