Atualizado: 18/01/2024

Ordenando e Recuperando Registros com order_by, values e values_list - Django

No Django, os métodos order_by, values e values_list são ferramentas essenciais para manipulação de dados em QuerySets. Eles permitem ordenar resultados e otimizar consultas ao retornar apenas subconjuntos específicos de dados diretamente do banco de dados, sem a necessidade de criar instâncias completas dos modelos.

order_by

O método order_by é usado para ordenar os resultados de uma consulta com base em campos específicos. Para ordenar os objetos em ordem crescente, basta informar o nome do campo:

from .models import Person
 
# Ordenação crescente pelo nome
people = Person.objects.order_by("name")
for person in people:
    print(person.name)

Se for necessário ordenar por mais de um campo, basta passar os nomes dos campos como argumentos. A ordenação será aplicada na sequência definida:

# Ordenação por nome e, em seguida, por idade
people = Person.objects.order_by("name", "age")

Para ordenar em ordem decrescente, basta adicionar o prefixo - ao nome do campo:

# Ordenação decrescente pelo nome
people = Person.objects.order_by("-name")

values

O método values é usado para retornar um QuerySet contendo dicionários com os valores dos campos especificados. Isso permite otimizar a consulta ao retornar apenas os dados necessários, sem a necessidade de instanciar objetos completos do modelo.

Por exemplo:

from .models import Person 
 
# Retorna todos os campos como dicionário
people = Person.objects.values()
print(people)
    
# Resultado
# <QuerySet [{'id': 1, 'name': 'Bob', 'age': 42}, {'id': 2, 'name': 'Tom', 'age': 38}]>

Se forem necessários apenas alguns campos, eles podem ser especificados:

# Retorna apenas os campos "id" e "name"
people = Person.objects.values("id", "name")
print(people)
    
# Resultado
# <QuerySet [{'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Tom'}]>

values_list

O método values_list funciona de forma semelhante ao values, mas retorna um QuerySet onde cada item é representado como uma tupla com os valores dos campos especificados.

Por exemplo:

from .models import Person 
 
# Retorna todos os campos como tuplas
people = Person.objects.values_list()
print(people)
    
# Resultado
# <QuerySet [(1, 'Bob', 42), (2, 'Tom', 38)]>

Se forem necessários apenas alguns campos, eles podem ser especificados:

# Retorna apenas os campos "id" e "name"
people = Person.objects.values_list("id", "name")
print(people)
    
# Resultado
# <QuerySet [(1, 'Bob'), (2, 'Tom')]>

Se apenas um campo for selecionado, o resultado será um conjunto de tuplas com um único valor em cada tupla. Para simplificar esse formato, o parâmetro flat=True pode ser usado, retornando os valores como uma lista simples:

# Retorna apenas o campo "name" como lista simples
people = Person.objects.values_list("name", flat=True)
print(people)
    
# Resultado
# <QuerySet ['Bob', 'Tom']>
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com