Comment puis-je récupérer le dernier enregistrement dans un certain ensemble de requêtes?
Vous pouvez simplement faire quelque chose comme ça, en utilisant reverse()
:
queryset.reverse()[0]
Attention également à cet avertissement de la documentation Django:
... notez que
reverse()
ne devrait généralement être appelé que sur un QuerySet qui a un ordre défini (par exemple, lorsque vous interrogez un modèle qui définit un ordre par défaut, ou lorsque vous utilisezorder_by()
) . Si aucun ordre de ce type n'est défini pour unQuerySet
donné, l'appel dereverse()
n'a aucun effet réel (l'ordre n'était pas défini avant d'appelerreverse()
et restera indéfini après).
latest(field_name=None)
retourne le dernier objet de la table, par date, en utilisant le champ_nom fourni comme champ de date.Cet exemple renvoie la dernière entrée du tableau, selon
pub_date
champ:Entry.objects.latest('pub_date')
Django> = 1,6
Ajout des méthodes QuerySet first () et last () qui sont des méthodes pratiques renvoyant le premier ou le dernier objet correspondant aux filtres. Renvoie None s'il n'y a aucun objet correspondant.
La façon la plus simple de le faire est:
books.objects.all().last()
Vous l'utilisez également pour obtenir la première entrée comme ceci:
books.objects.all().first()
Pour obtenir le premier objet:
ModelName.objects.first()
Pour obtenir les derniers objets:
ModelName.objects.last()
Vous pouvez utiliser un filtre
ModelName.objects.filter(name='simple').first()
Cela fonctionne pour moi.
Lorsque le jeu de requêtes est déjà épuisé, vous pouvez le faire pour éviter un autre indice db -
last = queryset[len(queryset) - 1] if queryset else None
N'utilisez pas try...except...
.
Django ne lance pas IndexError
dans ce cas.
Il renvoie AssertionError
ou ProgrammingError
(lorsque vous exécutez python avec l'option -O)
Si vous utilisez Django 1.6 et plus, c'est beaucoup plus facile maintenant que la nouvelle API a été introduite -
Model.object.earliest()
Il donnera le dernier () avec sens inverse.
p.s. - Je connais son ancienne question, je poste comme si quelqu'un avançait sur cette question, ils apprennent à connaître cette nouvelle fonctionnalité et ne finissent pas par utiliser l'ancienne méthode.