2012-06-03 7 views
5

¿Hay una manera de lograr lo siguiente en una llamada:Model.objects.get() o Ninguno

Model.objects.get(id=1) else None 

La única forma que he encontrado una manera de hacerlo es haciendo:

try: 
    object = Model... 
except: 
    object = None 

¿Hay alguna manera de hacer esto en una sola llamada en django?

actualización: No parece ser una manera de hacer esto que no sea en un bloque try/except, pero aquí hay una respuesta mejor: In Django, how do I objects.get, but return None when nothing is found?

+0

Pues bien, parece que ya resolviste tu pregunta . Solo como argumento adicional, use try: ... except (usando excepciones específicas) se considera una buena práctica en Python (y mucho menos en Django, que sigue más o menos la misma filosofía). –

+2

'(Model.objects.filter (pk = 1) o [None]) [0]' es menos explícito pero a veces también útil. – okm

+0

posible duplicado de [En Django, ¿cómo hago objects.get, pero devuelvo None cuando no se encuentra nada?] (Http://stackoverflow.com/questions/3090302/in-django-how-do-i-objects-get -but-return-none-when-nothing-is-found) – congusbongus

Respuesta

2

si usted lo está utilizando en una solicitud web, y usted querrá volver 404 si el objeto no existe tal vez debería utilizar

get_object_or_404(Mode, pk=1) 
0

get_object_or_404

en su modelo de hacer. . .

@models.permalink 
def get_absolute_url(self): 
    return "/blog/%s/" self.slug 
Cuestiones relacionadas