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)