Disons que j'ai une table People
, existe-t-il un moyen de vérifier rapidement si un objet People
existe avec un nom de 'Fred'
? Je sais que je peux interroger
People.objects.filter(Name='Fred')
puis vérifiez la longueur du résultat renvoyé, mais existe-t-il un moyen de le faire de manière plus élégante?
Mise à jour :
Comme mentionné dans les réponses plus récentes, depuis Django 1.2 vous pouvez utiliser la méthode exists()
à la place ( link ).
Réponse originale:
N'utilisez pas len () sur le résultat, vous devez utiliser People.objects.filter(Name='Fred').count()
. Selon la documentation Django,
count () effectue un SELECT COUNT (*) en arrière-plan, vous devez donc toujours utiliser count () plutôt que de charger tous les enregistrements dans Python objets et appeler len () sur le résultat ( sauf si vous devez quand même charger les objets en mémoire, auquel cas len () sera plus rapide).
source: documentation Django
Une méthode exist () dans l'API QuerySet est disponible depuis Django 1.2 .
À partir de Django 1.2, vous pouvez utiliser .exists()
sur un QuerySet, mais dans les versions précédentes, vous pouvez apprécier très très efficace astuce décrite dans ce ticket .
Vous pouvez utiliser count()
Par exemple:
People.objects.filter(Name='Fred').count()
Si la colonne Nom est unique, vous pouvez faire:
try:
person = People.objects.get(Name='Fred')
except (People.DoesNotExist):
# Do something else...
Vous pouvez également utiliser get_object_or_404()
Par exemple:
from Django.shortcuts import get_object_or_404
get_object_or_404(People, Name='Fred')