No Django, como verificar se existe alguma entrada para uma consulta
sc=scorm.objects.filter(Header__id=qp.id)
Era assim que era feito no php
if(mysql_num_rows($resultn)) {
// True condition
}
else {
// False condition
}
No Django, como verificar se existe alguma entrada para uma consulta
sc=scorm.objects.filter(Header__id=qp.id)
Era assim que era feito no php
if(mysql_num_rows($resultn)) {
// True condition
}
else {
// False condition
}
Respostas:
Use count()
:
sc=scorm.objects.filter(Header__id=qp.id)
if sc.count() > 0:
...
A vantagem sobre, por exemplo len()
, é que o QuerySet ainda não foi avaliado:
count()
executa umaSELECT COUNT(*)
operação nos bastidores, portanto, você deve sempre usar emcount()
vez de carregar todo o registro em objetos Python e chamarlen()
o resultado.
Tendo isso em mente, vale a pena ler quando QuerySets são avaliados .
Se você usar get()
, por exemplo scorm.objects.get(pk=someid)
, e o objeto não existir, uma ObjectDoesNotExist
exceção é levantada:
from django.core.exceptions import ObjectDoesNotExist
try:
sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
print ...
Atualização:
também é possível usar exists()
:
if scorm.objects.filter(Header__id=qp.id).exists():
....
Retorna
True
se o QuerySet contiver algum resultado e,False
caso contrário. Isso tenta realizar a consulta da maneira mais simples e rápida possível, mas executa quase a mesma consulta que uma consulta QuerySet normal.
if scorm.objects.filter(Header__id=qp.id).exists()
A partir do Django 1.2, você pode usar exists()
:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists
if some_queryset.filter(pk=entity_id).exists():
print("Entry contained in queryset")
.objects.get(pk=...)
rota
isso funcionou para mim!
if some_queryset.objects.all (). exists (): print ("esta tabela não está vazia")