django - afficher la longueur d'un queryset dans un modèle
Dans mon fichier html, comment puis-je sortie de la taille de la queryset que j'utilise (pour mes fins de débogage)
J'ai essayé
{{ len(some_queryset) }}
mais cela ne fonctionne pas. Quel est le format?
- Il y a un filtre appelé
length
appeler len() sur quoi que ce soit.{{ any_iterable|length }}
- donc, pour ce que vous auriez utilisé
some_queryset.all|length
? Est-ce optimal en termes de SQL généré? Lesome_queryset.count
utiliseSELECT COUNT(*)
... au lieu de sélectionner tous les champs de modèle. Je ne sais pas comment important ce n'est en termes de performances, je crois que pour quelque chose avec un grand query_set cela pourrait être significative? - oui. Si vous êtes SEULEMENT un de les compter, puis faire some_queryset.le comte. Si c'est déjà évalué de toute façon, |longueur pourrait vous sauver la bd à succès.
- Merci @Yuji'Tomita'Tomita
Vous devez vous connecter pour publier un commentaire.
Donner
{{ some_queryset.count }}
un essai.C'est mieux que d'utiliser len (qui peut être invoquée avec
{{ some_queryset.__len__ }}
), car il permet d'optimiser le SQL généré dans l'arrière-plan, afin de récupérer uniquement le nombre d'enregistrements à la place des enregistrements eux-mêmes.__len__
dans les modèles.{{ some_queryset.count }}
dans le modèle, il sera question d'une autre base de données téléphonique. si c'est une valeur que vous allez afficher plus d'une fois, de stocker la valeur dans la vue et la passer au modèle.some_queryset.count()
ou{{some_queryset.count}}
dans votre modèle.ne pas utiliser
len
, il est beaucoup moins efficace. La base de données doit être en train de faire ce travail. Voir la documentation surcount()
.Cependant, la prise de tampon de conseils en compte, si vous envisagez de parcourir les enregistrements de toute façon, vous pourriez aussi bien utiliser
len
qui entraînera la résolution du queryset et de faire les lignes obtenues résident dans la mémoire principale - ce l'habitude d'aller à perdre parce que vous allez visiter ces lignes, de toute façon. Il pourrait en fait être plus rapide, en fonction de connexion aux bases de latence, mais vous devriez toujours mesurer.dont use len, it is much less efficient
: C'est vrai, sauf si vous allez effectuer une itération sur votre queryset de toute façon. Dans ce cas, préférezlen
surcount
. en Lire PlusJuste pour mettre en avant @Yuji'Tomita'Tomita commentaire ci-dessus comme une réponse distincte:
De sorte que vous pouvez utiliser:
Accepté la réponse n'est pas tout à fait correct. Si vous devez utiliser len() (ou la longueur du filtre dans un modèle) vs count() dépend de votre cas d'utilisation.
Si le QuerySet n'existe que pour compter le nombre de lignes, utilisez la fonction count().
Si le QuerySet est utilisé ailleurs, c'est à dire dans une boucle, utilisez len() ou |longueur. À l'aide de count() ici question d'une autre, SÉLECTIONNEZ-requête pour compter le nombre de lignes, tandis que len() simplement en compte la quantité de résultats mis en cache dans le QuerySet.
De la docs:
Bien qu'il semble qu'avec les objets que vous avez déjà hâte-chargé à l'aide de prefetch_related(), vous pouvez utiliser la fonction count() et Django sera assez intelligent pour utiliser les données mises en cache au lieu de faire un autre SELECT de la requête.