Django vérifie s'il existe une requête


Réponses:


87

Utilisez count():

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

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

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

count()effectue une SELECT COUNT(*)analyse des coulisses, vous devez donc toujours utiliser count() plutôt que de charger tout l'enregistrement dans des objets Python et appeler len() le résultat.

En gardant cela à l'esprit, lorsque les QuerySets sont évalués, cela vaut la peine d'être lu.


Si vous utilisez get(), par exemple scorm.objects.get(pk=someid), et que l'objet n'existe pas, une ObjectDoesNotExistexception est déclenché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 Truesi le QuerySet contient des résultats, et Falsesinon. Cela tente d'exécuter la requête de la manière la plus simple et la plus rapide possible, mais il exécute presque la même requête qu'une requête QuerySet normale.


51
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev

@Alex Lebedev: Oui, cette méthode sera disponible dans Django 1.2. Merci.
Felix Kling


0

cela a fonctionné pour moi!

if some_queryset.objects.all (). exists (): print ("cette table n'est pas vide")

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.