Resumo : neste tutorial, você aprenderá como usar o intervalo do Django para verificar se um valor está entre dois valores.
Uma rápida introdução ao operador SQL BETWEEN
No SQL, você usa o BETWEEN
operador para verificar se um valor está entre dois valores:
field_name BETWEEN low_value AND high_value
Linguagem de código: Python ( python )
É equivalente ao seguinte:
field_name >= low_value AND field_name <= high_value
Linguagem de código: Python ( python )
O BETWEEN
operador retorna verdadeiro se field_name
estiver entre low_value
e high_value
. Caso contrário, retorna False.
Usando o intervalo do Django com números
O equivalente do BETWEEN
operador do Django é range:
Entity.objects.filter(field_name__range=(low_value,high_value))
Linguagem de código: Python ( python )
Por exemplo, você pode encontrar funcionários cujo ID esteja entre 1 e 5 usando o intervalo como este:
>>> Employee.objects.filter(id__range=(1,5))
Linguagem de código: Python ( python )
Nos bastidores, o Django executa a seguinte consulta:
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 5
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando o intervalo do Django com datas
Além de números e strings, o intervalo também funciona com datas. Por exemplo, o seguinte retorna todas as atribuições de trabalho começando de January 1, 2020
, até 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'::date
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
NÃO ENTRE
O operador NOT nega o operador BETWEEN:
field_name NOT BETWEEN (low_value, high_value)
Em outras palavras, NOT BETWEEN retorna verdadeiro se um valor não estiver em um intervalo de valores. É equivalente ao seguinte:
field_name < low_value OR field_value > high_value
Linguagem de código: Python ( python )
No Django, você pode usar o objeto Q com o intervalo para verificar se um valor não está em um intervalo:
Entity.objects.filter(~Q(field_name__range=(low_value,high_value)))
Linguagem de código: Python ( python )
Por exemplo, você pode descobrir que funcionários com o ID não estão no intervalo (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)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use o Django
range
para verificar se um valor está em um intervalo de valores.