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)

155voto

Voir la documentation de django : https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

Vous devez spécifier un champ dans latest(). ex.

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

Ou si la Meta de votre modèle spécifie get_latest_by, vous pouvez laisser de côté l'élément field_name argument pour earliest() or latest() . Django utilisera le champ spécifié dans get_latest_by par défaut.

121voto

catherine Points 9634
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

62voto

Subin Shrestha Points 159

dernier() dernier()

Usign last() :

ModelName.objects.last()

en utilisant latest() :

ModelName.objects.latest('id')

21voto

acjay Points 4797

latest est réellement conçu pour fonctionner avec des champs de date (il fonctionne probablement aussi avec d'autres types de totaux ordonnés, mais je n'en suis pas sûr). Et la seule façon de l'utiliser sans spécifier le nom du champ est de définir l'attribut get_latest_by méta attribut, comme mentionné aquí .

7voto

Thomas John Points 498

obj= Model.objects.filter(testfield=12).order_by('-id')[:1] est la bonne solution

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