web-dev-qa-db-fra.com

Obtenez le dernier enregistrement avec le filtre dans Django

J'essaie d'obtenir le dernier objet modèle Django mais ne semble pas réussir.

Ni l'un ni l'autre ne fonctionnent:

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)
69
doniyor
obj= Model.objects.filter(testfield=12).order_by('-id')[0]
82
catherine

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

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

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

Ou si la méta de votre modèle spécifie get_latest_by, vous pouvez laisser l’argument field_name Dans earliest() or latest(). Django utilisera par défaut le champ spécifié dans get_latest_by.

95
user3345047

latest est vraiment conçu pour fonctionner avec les champs de date (il fonctionne probablement aussi avec les autres types à ordre total, mais pas sûr). Et le seul moyen de l’utiliser sans spécifier le nom du champ est de définir le paramètre get_latest_by méta attribut, comme mentionné ici .

15
acjay

last ()latest ()

Usign last ():

ModelName.objects.last()

en utilisant latest ():

ModelName.objects.latest('id')
8
Subin Shrestha

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

5
Thomas John