2010-04-22 15 views
55

En Django cómo comprobar si existe alguna entrada para una consultacheque Django para cualquier existe para una consulta

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

Ésta era la forma en que se llevó a cabo en php

if(mysql_num_rows($resultn)) { 
    // True condition 
    } 
else { 
    // False condition 
    } 
+0

duplicado posible de [¿cuál es la manera correcta para validar si existe un objeto en una vista de Django sin devolver 404? ] (http://stackoverflow.com/questions/639836/what-is-the-right-way-to-validate-if-an-object-exists-in-a-django-view-without-r) – Wtower

Respuesta

48

Uso count():

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

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

La ventaja sobre, por ejemplo, len() es decir, que el QuerySet aún no se evalúa:

count() realiza una SELECT COUNT(*) detrás de las escenas, por lo que siempre debe utilizar count() en lugar de cargar todos los registros en objetos de Python y llamando len() en el resultado.

Teniendo esto en cuenta, puede valer la pena leer When QuerySets are evaluated.


Si utiliza get(), por ejemplo, scorm.objects.get(pk=someid), y el objeto no existe, una excepción ObjectDoesNotExist se eleva:

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(): 
    .... 

devoluciones True si el QuerySet contiene ningún resultados, y False si 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.

+0

Gracias mucho ..................... – Hulk

+42

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

+0

@Alex Lebedev: Sí, este método estará disponible en Django 1.2. Gracias. –

Cuestiones relacionadas