Django comprueba si existe alguna consulta

Respuestas:

87

Utilizar count():

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

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

La ventaja sobre eg len()es que el QuerySet aún no se ha evaluado:

count()realiza un SELECT COUNT(*)detrás de escena, por lo que siempre debe usar en count() lugar de cargar todo el registro en objetos de Python y llamar len() al resultado.

Teniendo esto en cuenta, puede valer la pena leer cuando se evalúan los QuerySets .


Si usa get(), por ejemplo scorm.objects.get(pk=someid), y el objeto no existe, se genera una ObjectDoesNotExistexcepción:

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

Actualización: también es posible utilizar exists():

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

Devuelve Truesi el QuerySet contiene algún resultado y Falsesi no. Esto intenta realizar la consulta de la manera más simple y rápida posible, pero ejecuta casi la misma consulta que una consulta QuerySet normal.

Felix Kling
fuente
51
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev
@Alex Lebedev: Sí, este método estará disponible en Django 1.2. Gracias.
Felix Kling
183

A partir de Django 1.2, puede 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
fuente
25
Esta debería ser la respuesta aceptada. Existe () es generalmente significativamente más rápido que count ().
frmdstryr
1
También parece ser más rápido que la .objects.get(pk=...)ruta
Brad Solomon
0

esto funcionó para mí!

if some_queryset.objects.all (). existe (): print ("esta tabla no está vacía")

i_m_brunda
fuente