J'ai quelques questions sur Django exists()
et DoesNotExist
exception.
Exemple de code:
id = 1
# first
if User.objects.get(pk=id).exists():
# my logic
pass
# second
try:
User.objects.get(pk=id)
# my logic
pass
except User.DoesNotExist:
return 0
J'utilise souvent la méthode get()
. Quelle pratique est la meilleure? Quel code est le meilleur? Le premier ou le second?
Vous pouvez trouver plus d'informations dans docs : À propos de exists()
, mais exists()
ne fonctionne que pour QuerySet
Retourne True si le QuerySet contient des résultats, et False sinon. Cela tente d'exécuter la requête de la manière la plus simple et la plus rapide possible, mais exécute pratiquement la même requête qu'une requête QuerySet normale.
exist () est utile pour les recherches portant à la fois sur l'appartenance à un objet dans un QuerySet et sur l'existence d'objets quelconques dans un QuerySet, en particulier dans le contexte d'un grand QuerySet.
Mais ObjectDoesNotExist
ne fonctionne qu'avec get()
.
Aussi, vous pouvez essayer une autre approche:
user = User.objects.filter(id=2)
if user:
# put your logic
pass
dans le modèle Django, si vous utilisez model.objects.get()
s'il n'existe pas, une erreur est générée. dans ce cas, vous pouvez utiliser DoesNotExist
avec except:
try:
val = Model.objects.get(pk=val) # if nothing found it will raise an exception
exception:
you can trace an exception without mentioning anything on top.
(or)
exception ObjectDoesNotExist:
# it will come here if exception is DoesNotExist