如何在 django orm 中翻译这样的查询?
select id, year, month
where (year*100 + month) between 201703 and 201801
预先感谢您的帮助
最佳答案
您可以首先创建注释,然后对其进行过滤:
<b>from django.db.models import F</b>
(Modelname.objects
<b>.annotate(yearmonth=F('year')*100+F('month'))</b>
.filter(<b>yearmonth__range=(201703, 201801)</b>))
所以这里我们构造一个注释yearmonth
(如果您愿意,可以使用其他名称),并将其等于 year
列乘以 100 加上 month
柱子。接下来,我们可以过滤该注释,并通过指定 __range
来执行此操作。这里有两个边界。
通常,这适用于执行您在此处执行的操作的任何数据库系统(将列与常数相乘,将两个值相加),以及执行 __range
过滤器(在 MySQL 中,这被翻译为 <var> BETWEEN <min> AND <max>
)。然而,由于我们使用 Django ORM,如果我们稍后决定使用另一个数据库,查询将被翻译为其他数据库查询语言(当然这是可能的)。
关于django - 基于django orm计算的过滤语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564905/