Gama Django

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 BETWEENoperador para verificar se um valor está entre dois valores:

field_name BETWEEN low_value AND high_valueLinguagem de código:  Python  ( python )

É equivalente ao seguinte:

field_name >= low_value AND field_name <= high_valueLinguagem de código:  Python  ( python )

O BETWEENoperador retorna verdadeiro se field_nameestiver entre low_valuee high_value. Caso contrário, retorna False.

Usando o intervalo do Django com números

O equivalente do BETWEENoperador 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 5Linguagem 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'::dateLinguagem 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_valueLinguagem 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 rangepara verificar se um valor está em um intervalo de valores.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *