ORM中的自定义算术过滤子句

时间:2017-05-02 11:44:30

标签: django django-orm

我试图从特定表中检索某个减法导致值小于或等于某个固定值的所有行。在SQL中它看起来像这样:

SELECT * FROM my_table WHERE column_a - column_b <= 1;

在Django中,我认为我可以应用filter组合F表达式,但据我所知,只有在要比较的值是列或注释时才有可能。由于不鼓励使用extra关键字,RawSQL也不是一个有吸引力的选项,我想知道是否有内置的方法来应用这种过滤。当然,我也可以使用注释,但出于好奇,很高兴知道是否有更“直接”的方式。

提前致谢!

1 个答案:

答案 0 :(得分:0)

正如您所说,您使用annotate。但这并不意味着聚合,它只是一个计算字段。所以:

MyTable.objects.annotate(calculated_field=F('column_a') - F('column_b')).filter(calculated_field__lte=1)