No Django, os métodos order_by
values
values_list
order_by
O método order_by
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 -
# Ordenação decrescente pelo nome
people = Person.objects.order_by("-name")
values
O método values
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
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
# Retorna apenas o campo "name" como lista simples
people = Person.objects.values_list("name", flat=True)
print(people)
# Resultado
# <QuerySet ['Bob', 'Tom']>