Django verifica se existe alguma existência para uma consulta

Respostas:

87

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 uma SELECT COUNT(*)operação nos bastidores, portanto, você deve sempre usar em count() vez de carregar todo o registro em objetos Python e chamar len() 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 ObjectDoesNotExistexceçã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 Truese o QuerySet contiver algum resultado e, Falsecaso 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.

Felix Kling
fonte
51
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev
@Alex Lebedev: Sim, este método estará disponível no Django 1.2. Obrigado.
Felix Kling
183

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")
sdornan
fonte
25
Esta deve ser a resposta aceita. existe () é geralmente significativamente mais rápido que count ().
frmdstryr
1
Também parece ser mais rápido que a .objects.get(pk=...)rota
Brad Solomon
0

isso funcionou para mim!

if some_queryset.objects.all (). exists (): print ("esta tabela não está vazia")

i_m_brunda
fonte