Summary: in this tutorial, you’ll learn how to use the Django range to check if a value is between two values.
A quick introduction to SQL BETWEEN operator #
In SQL, you use the BETWEEN operator to check if a value is between two values:
field_name BETWEEN low_value AND high_valueCode language: Python (python)It’s equivalent to the following:
field_name >= low_value AND field_name <= high_valueCode language: Python (python)The BETWEEN operator returns true if the field_name is between low_value and high_value. Otherwise, it returns False.
Using Django range with numbers #
Django’s equivalent of the BETWEEN operator is range:
Entity.objects.filter(field_name__range=(low_value,high_value))Code language: Python (python)For example, you can find employees whose id is between 1 and 5 using the range like this:
>>> Employee.objects.filter(id__range=(1,5))Code language: Python (python)Behind the scenes, Django executes the following query:
SELECT "hr_employee"."id",
"hr_employee"."first_name",
"hr_employee"."last_name",
"hr_employee"."contact_id",
"hr_employee"."department_id"
FROM "hr_employee"
WHERE "hr_employee"."id" BETWEEN 1 AND 5Code language: SQL (Structured Query Language) (sql)Using Django range with dates #
Besides numbers and strings, the range also works with dates. For example, the following return all job assignments starting from January 1, 2020, to March 31, 2020:
>>> Assignment.objects.filter(begin_date__range=(start_date,end_date))
SELECT "hr_assignment"."id",
"hr_assignment"."employee_id",
"hr_assignment"."job_id",
"hr_assignment"."begin_date",
"hr_assignment"."end_date"
FROM "hr_assignment"
WHERE "hr_assignment"."begin_date" BETWEEN '2020-01-01'::date AND '2020-03-31'::dateCode language: SQL (Structured Query Language) (sql)NOT BETWEEN #
The NOT operator negates the BETWEEN operator:
field_name NOT BETWEEN (low_value, high_value)In other words, the NOT BETWEEN returns true if a value is not in a range of values. It is equivalent to the following:
field_name < low_value OR field_value > high_valueCode language: Python (python)In Django, you can use the Q object with the range to check if a value is not in a range:
Entity.objects.filter(~Q(field_name__range=(low_value,high_value)))Code language: Python (python)For example, you can find employees with the id are not in the range (1,5):
>>> Employee.objects.filter(~Q(id__range=(1,5)))
SELECT "hr_employee"."id",
"hr_employee"."first_name",
"hr_employee"."last_name",
"hr_employee"."contact_id",
"hr_employee"."department_id"
FROM "hr_employee"
WHERE NOT ("hr_employee"."id" BETWEEN 1 AND 5)Code language: SQL (Structured Query Language) (sql)Summary #
- Use the Django
rangeto check if a value is in a range of values.