Comment puis-je récupérer le dernier enregistrement dans un certain jeu de requêtes?
django
django-queryset
Stephen
la source
la source
Django Doc :
la source
La façon la plus simple de le faire est:
books.objects.all().last()
Vous utilisez également ceci pour obtenir la première entrée comme ceci:
books.objects.all().first()
la source
books.objects.last()
etbooks.objects.first()
devrait faire l'affaire.XYZ.objects.first()
etXYZ.objects.last()
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 source
Pour obtenir le premier objet:
ModelName.objects.first()
Pour obtenir les derniers objets:
ModelName.objects.last()
Vous pouvez utiliser le filtre
ModelName.objects.filter(name='simple').first()
Cela fonctionne pour moi.
la source
Lorsque le jeu de requêtes est déjà épuisé, vous pouvez le faire pour éviter un autre indice de base de données -
last = queryset[len(queryset) - 1] if queryset else None
N'utilisez pas
try...except...
.Django ne lance pas
IndexError
dans ce cas.Il lance
AssertionError
ouProgrammingError
(lorsque vous exécutez python avec l'option -O)la source
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 la dernière () avec la direction inverse.
ps - Je connais son ancienne question, je poste comme si à l'avenir quelqu'un atterrit sur cette question, ils apprennent à connaître cette nouvelle fonctionnalité et ne finissent pas par utiliser l'ancienne méthode.
la source
Vous pouvez utiliser
Model.objects.last()
ouModel.objects.first()
. Si aucunordering
n'est défini, l'ensemble de requêtes est trié en fonction de la clé primaire. Si vous voulez ordonner le jeu de requêtes de comportement, vous pouvez vous référer aux deux derniers points.Si vous envisagez de faire cela,
Model.objects.all().last()
pour récupérer le dernier etModel.objects.all().first()
pour récupérer le premier élément d'un jeu de requêtes ou en utilisantfilters
sans pensée. Ensuite, voyez quelques mises en garde ci-dessous.La partie importante à noter ici est que si vous n'en avez pas inclus
ordering
dans votre modèle, les données peuvent être dans n'importe quel ordre et vous aurez un dernier ou un premier élément aléatoire qui n'était pas attendu.Par exemple. Disons que vous avez un modèle nommé
Model1
qui a 2 colonnesid
etitem_count
10 lignes ayant les id 1 à 10. [Il n'y a pas de classement défini]Si vous récupérez Model.objects.all (). Last () comme ceci, vous pouvez obtenir n'importe quel élément de la liste des 10 éléments. Oui, c'est aléatoire car il n'y a pas de commande par défaut.
Alors qu'est ce qui peut être fait?
ordering
fonction de n'importe quel champ ou champs de votre modèle. Il a également des problèmes de performances, veuillez vérifier cela également. Réf: Iciorder_by
lors de la récupération. Comme ça:Model.objects.order_by('item_count').last()
la source
Le moyen le plus simple, sans avoir à vous soucier de l'ordre actuel, consiste à convertir le QuerySet en liste afin que vous puissiez utiliser l'indexation négative normale de Python. Ainsi:
list(User.objects.all())[-1]
la source