как поймать MultipleObjectsReturned ошибку в django

можно ли поймать MultipleObjectsReturned ошибка в Django?

Я делаю поисковый запрос, и если есть более одного объекта, я хочу, чтобы первый в списке был взят, поэтому я попробовал это:

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

однако он существует в doc хотя

глобальная переменная MultipleObjectsReturned не существует

3 ответов


Это не лучшая практика. Технически это можно сделать без использования исключений. Вы намеревались использовать Location и Car в этом примере?

вы можете сделать это:

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

я настоятельно рекомендую вам прочитать ссылку API Django QuerySet.

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

чтобы ответить на ваш вопрос о том, где существует исключение-вы всегда можете получить доступ к этим исключениям QuerySet на самой модели. Е. Г. Location.DoesNotExist и Location.MultipleObjectsReturned. Вам не нужно импортировать их, если у вас уже есть импортированная модель.


использовать фильтр:

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

или импортируйте исключение:

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

Это более подходящие для Python способ сделать это.

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