Métodos latest, earliest, first e last no Django
Métodos latest e earliest
O método latest()
(e sua versão assíncrona alatest()
) retorna o registro com as alterações mais recentes em campos específicos.
O método earliest()
(e sua versão assíncrona aearliest()
) retorna o registro com as alterações mais antigas nos campos indicados.
Ambos os métodos aceitam como argumento um ou mais campos que determinam a base da ordenação e seleção do registro:
from .models import Person
# Seleciona o registro com as alterações mais recentes no campo "id"
latest_person = Person.objects.latest("id")
print(f"{latest_person.name} - {latest_person.age}")
# Seleciona o registro com as alterações mais antigas no campo "id"
earliest_person = Person.objects.earliest("id")
print(f"{earliest_person.name} - {earliest_person.age}")
É possível especificar múltiplos campos:
# Seleciona o registro com as alterações mais recentes no campo "age"
# e as alterações mais antigas no campo "name"
latest_person = Person.objects.latest("age", "-name")
print(f"{latest_person.name} - {latest_person.age}")
Quando um campo é precedido por um sinal de menos, a ordem de busca é invertida. Assim, para o método latest
, o registro com a alteração mais antiga será retornado, enquanto para o método earliest
, o registro com a alteração mais recente será retornado.
Se nenhum registro for encontrado (por exemplo, em um conjunto vazio), ambos os métodos lançam a exceção DoesNotExist
.
Métodos first e last
O método first()
(e sua versão assíncrona afirst()
) retorna o primeiro registro de um conjunto, enquanto o método last()
(e sua versão assíncrona alast()
) retorna o último registro.
from .models import Person
# Seleciona o primeiro registro do conjunto
first_person = Person.objects.first()
print(f"{first_person.name} - {first_person.age}")
# Seleciona o último registro do conjunto
last_person = Person.objects.last()
print(f"{last_person.name} - {last_person.age}")
# Seleciona o primeiro registro do conjunto ordenado por idade
first_person = Person.objects.order_by("age").first()
print(f"{first_person.name} - {first_person.age}")
Diferentemente dos métodos latest
e earliest
, first
e last
retornam None quando não há registros no conjunto.
Documentação oficial: