【问题标题】:Django ORM - filter method with some arithmetic calculationDjango ORM - 带有一些算术计算的过滤方法
【发布时间】:2022-01-12 11:25:23
【问题描述】:

我有以下查询,我正在尝试将其转换为 django ORM 查询。

SELECT * FROM products WHERE discontinued = 0 AND ((unitsinstock + unitsonorder) < reorderlevel)

我尝试了以下 python 代码,但没有成功。

products = Products.objects.filter(
    discontinued=0, (unitsinstock + unitsonorder < reorderlevel)
)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    F() 表达式有助于解决这个问题, 以下查询完美运行

    Products.objects.filter(
      discontinued =0, 
      reorderlevel__gt = F("unitsinstock") + F("unitsonorder")
    )
    

    【讨论】:

      【解决方案2】:

      查看 ORM 中的 F() expressionsannotate 函数。它会让你做你想做的事。

      
      products = Products.objects.filter(discontinued=0).annotate(
          currentlevel=Sum(F("unitsinstock") + F("unitsonorder"))
      ).filter(reorderlevel__gt=F("currentlevel"))
      

      【讨论】:

      • 这帮助了谢谢
      猜你喜欢
      • 2012-12-10
      • 2018-11-06
      • 2020-08-21
      • 2014-09-02
      • 2012-09-13
      • 2021-04-07
      • 2022-11-10
      • 2021-02-05
      • 2016-11-07
      相关资源
      最近更新 更多