Вы можете сначала создать аннотацию, а затем отфильтровать ее:
<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, если позже мы решим использовать другую базу данных, запрос будет переведен на другой язык запросов к базе данных (конечно, если это возможно).