2010-05-18 46 views
29

Supongo que tengo una tabla People, ¿hay alguna forma de comprobar rápidamente si existe un objeto People con el nombre 'Fred'? Sé que puedo consultarPara los modelos de Django, ¿hay un atajo para ver si existe un registro?

People.objects.filter(Name='Fred') 

y luego comprobar la longitud del resultado devuelto, pero ¿hay una manera de hacerlo de una forma más elegante?

+0

Posible duplicado de [¿cuál es la forma correcta de validar si un objeto existe en una vista 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

33

actualización:

Como se mencionó en las respuestas más recientes, ya que Django 1.2 se puede utilizar el método en lugar exists() (link).


respuesta original:

'No uso len() en el resultado, usted debe utilizar People.objects.filter(Name='Fred').count(). De acuerdo con la documentación de Django,

recuento() realiza un SELECT COUNT (*) detrás de las escenas, por lo que debe siempre use count() en lugar de cargar todo el registro en Python objetos y llamando len() en el resultado (a menos que deba cargar los objetos en la memoria de todos modos, en cuyo caso len() será más rápido).

fuente: Django docs

5

Usted podría utilizar count() Por ejemplo:

People.objects.filter(Name='Fred').count() 

Si la columna Nombre es único, entonces usted podría hacer:

try: 
    person = People.objects.get(Name='Fred') 
except (People.DoesNotExist): 
    # Do something else... 

También es posible usar get_object_or_404() Por ejemplo:

from django.shortcuts import get_object_or_404 
get_object_or_404(People, Name='Fred') 
6

A partir de Django 1.2 se puede utilizar en un QuerySet .exists(), pero en versiones anteriores se puede disfrutar muy efectiva truco descrito en this ticket.

Cuestiones relacionadas