web-dev-qa-db-fra.com

Pour les modèles Django, existe-t-il un raccourci pour voir si un enregistrement existe?

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?

38
Rhubarb

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

40
vitorbal

Une méthode exist () dans l'API QuerySet est disponible depuis Django 1.2 .

43
Chase Seibert

À 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 .

8
Tuttle

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')
5
tdedecko