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")
)
Вернуться на верх