Как упомянуто в Django docs , когда метод get
не находит запись или находит несколько записей, он вызывает исключение, это ожидаемое поведение:
get () повышает MultipleObjectsReturned, если было найдено более одного объекта.Исключение MultipleObjectsReturned является атрибутом класса модели.
get () вызывает исключение DoesNotExist, если объект не найден для заданных параметров.Это исключение является атрибутом класса модели.
Использование исключений - способ решения этой проблемы, но на самом деле мне не нравится уродливый блок try-except
.Альтернативное и более чистое решение для меня - использовать комбинацию filter
+ first
.
user = UniversityDetails.objects.filter(email=email).first()
Когда вы делаете .first()
для пустого набора запросов, он возвращает None
.Таким образом, вы можете иметь тот же эффект в одной строке.
Единственная разница между перехватом исключения и использованием этого метода возникает, когда у вас есть несколько записей, первая вызовет исключение, а вторая установит первый элемент, но, поскольку вы используете get
, я могу предположитьмы не будем попадать в эту ситуацию.
Обратите внимание, что метод first
был добавлен в Django 1.6.