Como posso recuperar o último registro de um determinado queryset?
django
django-queryset
Stephen
fonte
fonte
Django Doc :
fonte
A maneira mais simples de fazer isso é:
books.objects.all().last()
Você também pode usar isso para obter a primeira entrada, como:
books.objects.all().first()
fonte
books.objects.last()
ebooks.objects.first()
deve fazer o truque.XYZ.objects.first()
eXYZ.objects.last()
Django> = 1,6
Adicionados os métodos QuerySet first () e last (), que são métodos de conveniência que retornam o primeiro ou o último objeto correspondente aos filtros. Retorna Nenhum se não houver nenhum objeto correspondente.
fonte
Para obter o primeiro objeto:
ModelName.objects.first()
Para obter os últimos objetos:
ModelName.objects.last()
Você pode usar o filtro
ModelName.objects.filter(name='simple').first()
Isso funciona para mim.
fonte
Quando o queryset já estiver esgotado, você pode fazer isso para evitar outra dica de banco de dados -
last = queryset[len(queryset) - 1] if queryset else None
Não use
try...except...
.Django não joga
IndexError
neste caso.Ele lança
AssertionError
ouProgrammingError
(quando você executa o python com a opção -O)fonte
Se estiver usando django 1.6 e superior, é muito mais fácil agora, pois a nova API foi introduzida -
Model.object.earliest()
Ele dará o último () com direção reversa.
ps - Eu sei que é uma questão antiga, estou postando como se fosse pra frente alguém pousar nessa questão, eles ficam conhecendo esse novo recurso e não acabam usando o método antigo.
fonte
Você pode usar
Model.objects.last()
ouModel.objects.first()
. Se nãoordering
for definido, o queryset é ordenado com base na chave primária. Se você deseja ordenar o comportamento do queryset, então você pode se referir aos dois últimos pontos.Se você está pensando em fazer isso,
Model.objects.all().last()
recuperar o último eModel.objects.all().first()
recuperar o primeiro elemento em um queryset ou usarfilters
sem pensar duas vezes. Então veja algumas advertências abaixo.A parte importante a observar aqui é que se você não incluiu nenhum
ordering
em seu modelo, os dados podem estar em qualquer ordem e você terá um último ou primeiro elemento aleatório que não era esperado.Por exemplo. Digamos que você tenha um modelo chamado
Model1
com 2 colunasid
eitem_count
10 linhas com id 1 a 10. [Não há ordenação definida]Se você buscar Model.objects.all (). Last () assim, poderá obter qualquer elemento da lista de 10 elementos. Sim, é aleatório, pois não há ordenação padrão.
Então, o que pode ser feito?
ordering
base em qualquer campo ou campos em seu modelo. Ele também tem problemas de desempenho, verifique isso também. Ref: aquiorder_by
enquanto busca. Como isso:Model.objects.order_by('item_count').last()
fonte
A maneira mais simples, sem ter que se preocupar com a ordem atual, é converter o QuerySet em uma lista para que você possa usar a indexação negativa normal do Python. Igual a:
list(User.objects.all())[-1]
fonte