J'ai eu un débat à ce sujet avec quelques collègues. Existe-t-il un moyen privilégié de récupérer un objet dans Django lorsque l'on n'en attend qu'un seul ?
Les deux moyens les plus évidents sont :
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# we have no object! do something
pass
et
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# we have no object! do something
pass
La première méthode semble plus correcte d'un point de vue comportemental, mais utilise des exceptions dans le flux de contrôle, ce qui peut introduire une certaine surcharge. La seconde est plus détournée mais ne lève jamais d'exception.
Avez-vous une idée de ce qui est préférable ? Laquelle est la plus efficace ?