web-dev-qa-db-fra.com

Django vérifier s'il existe pour une requête

Dans Django comment vérifier si une entrée existe pour une requête

sc=scorm.objects.filter(Header__id=qp.id)

C'est comme ça que ça s'est fait en php

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }
72
Hulk

Utilisez count() :

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

L'avantage par exemple len() signifie que le QuerySet n'est pas encore évalué:

count() effectue une SELECT COUNT(*) en arrière-plan, vous devez donc toujours utiliser count() plutôt que de charger tout l'enregistrement dans Python des objets et en appelant len() sur le résultat.

Ayant cela à l'esprit, Lorsque les QuerySets sont évalués peut être intéressant à lire.


Si vous utilisez get(), par exemple scorm.objects.get(pk=someid), et l'objet n'existe pas, une exception ObjectDoesNotExist est levée:

from Django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Mise à jour: il est également possible d'utiliser exists() :

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

Renvoie True si le QuerySet contient des résultats et False sinon. Cela tente d'exécuter la requête de la manière la plus simple et la plus rapide possible, mais elle exécute pratiquement la même requête qu'une requête QuerySet normale.

66
Felix Kling

Depuis Django 1.2, vous pouvez utiliser exists():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")
157
sdornan