Python >> Tutoriel Python >  >> Python

comment attraper l'erreur MultipleObjectsReturned dans Django

Utiliser un filtre :

Location.objects.filter(name='Paul').first()

Ou importez l'exception :

from django.core.exceptions import MultipleObjectsReturned
...
try:
    Location.objects.get(name='Paul')
except MultipleObjectsReturned:
    Location.objects.filter(name='Paul').first()

C'est une façon plus pythonique de le faire.

try:
    Location.objects.get(name='Paul')
except Location.MultipleObjectsReturned:
    Location.objects.filter(name='Paul')[0]

Ce n'est pas la meilleure pratique. Vous pouvez techniquement le faire sans utiliser d'exceptions. Aviez-vous l'intention d'utiliser Location et Car dans cet exemple ?

Vous pouvez faire ceci :

Location.objects.filter(name='Paul').order_by('id').first()

Je vous suggère fortement de lire la référence de l'API Django QuerySet.

https://docs.djangoproject.com/en/1.8/ref/models/querysets/

Pour répondre à votre question sur l'emplacement de l'exception, vous pouvez toujours accéder à ces exceptions QuerySet sur le modèle lui-même. Par exemple. Location.DoesNotExist et Location.MultipleObjectsReturned . Vous n'avez pas besoin de les importer si vous avez déjà importé le modèle.