django - 基于django orm计算的过滤语句

标签 django django-orm

如何在 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/

相关文章:

python - 使用 Elasticsearch 后端在 Django Haystack 中启用同义词

Django 将自定义表单错误添加到 form.errors

python - 如何通过相关项的条件聚合对 Django 查询集进行排序?

mysql - Django 多个数据库 - 无法连接到 mysql 服务器回退到 sqlite

python - 模型字段的 Django 随机值

Django:在查询集 update() 中使用带注释的聚合

django - 如何使用 django docker nginx 和 postgresql 使静态文件工作,因为它不为它们提供服务

python - Django - 如何将值从 <a href> 传递到 View

django - 我可以设置像 Sequelize.js 一样的 django 模型偏执吗

python - 在 django 上无损压缩图像