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
}
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 uneSELECT COUNT(*)
en arrière-plan, vous devez donc toujours utilisercount()
plutôt que de charger tout l'enregistrement dans Python des objets et en appelantlen()
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 etFalse
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.
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")