Estaba teniendo un debate sobre esto con algunos colegas. ¿Hay una forma preferida de recuperar un objeto en Django cuando esperas solo uno?Django filter versus get for single object?
Los dos maneras obvias son:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# we have no object! do something
pass
y
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# we have no object! do something
pass
El primer método parece comportamiento más correcto, pero utiliza excepciones en flujo de control que pueden introducir algo de sobrecarga. El segundo es más indirecto pero nunca levantará una excepción.
¿Alguna idea de cuál de estos es preferible? ¿Cuál es más eficiente?
Sin experiencia con Django, pero todavía en el clavo. Ser explícito, concisa y segura por defecto, son buenos principios sin importar el idioma o el marco. – nevelis