127 votes

Obtenir le dernier enregistrement avec un filtre dans Django

J'essaie d'obtenir le dernier objet modèle de Django mais je n'y arrive pas.

Ni l'un ni l'autre ne fonctionne :

obj = Model.objects.filter(testfield=12).latest()

obj = Model.objects.latest().filter(testfield=12)

4voto

Cornel Ciobanu Points 389
obj = Model.objects.filter(testfield=12).order_by('id').latest('id')
  1. Filtrez en fonction du champ dont vous avez besoin - dans ce cas, il s'agit de testfield.

Model.objects.filter(testfield=12)

  1. Pour obtenir l'enregistrement le plus récent, il faut d'abord trier le queryset. Pour qu'il sache retourner le dernier enregistrement basé sur un critère.

Maintenant, ordonnez les résultats en fonction de votre clé primaire - la plupart du temps le pk=id.

Model.objects.filter(testfield=12).order_by('id')

https://docs.djangoproject.com/en/4.0/ref/models/querysets/#order-by

Par défaut, les résultats renvoyés par un QuerySet sont ordonnés par le tuple d'ordonnancement donné par l'option d'ordonnancement dans le Meta du modèle. Vous pouvez remplacer cette option pour chaque QuerySet en utilisant la méthode order_by.

  1. Une fois que vous avez le queryset et que vous l'avez trié. Obtenez la dernière basée sur les critères dont vous avez besoin - dans ce cas, c'est l'id.

Model.objects.filter(testfield=12).order_by('id').latest('id')

3voto

Nikhil Bhardwaj Points 117

Vous pouvez faire une comparaison avec ça ici.

image

latest('created') est identique à order_by('-created').first() Veuillez me corriger si je me trompe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X