Django ORM - метод фильтра с некоторым арифметическим вычислением
У меня есть следующий запрос, который я пытаюсь превратить в запрос django ORM.
SELECT * FROM products WHERE discontinued = 0 AND ((unitsinstock + unitsonorder) < reorderlevel)
Я попробовал следующий код python, но безуспешно.
products = Products.objects.filter(
discontinued=0, (unitsinstock + unitsonorder < reorderlevel)
)
Посмотрите на функции F() expressions
и annotate
, которые находятся в ORM. Это позволит вам сделать то, что вы хотите.
products = Products.objects.filter(discontinued=0).annotate(
currentlevel=Sum(F("unitsinstock") + F("unitsonorder"))
).filter(currentlevel__gt=F("reorderlevel"))
Выражение
Вернуться на верх
F() помогло решить эту проблему, Приведенный ниже запрос сработал идеально
Products.objects.filter(
discontinued =0,
reorderlevel__gt = F("unitsinstock") + F("unitsonorder")
)