Когда я прошу, чтобы образцовый менеджер получил объект, он повышает DoesNotExist
когда нет никакого соответствующего объекта.
go = Content.objects.get(name="baby")
Вместо DoesNotExist
, как я могу иметь go
быть None
вместо этого?
Для этого не существует «встроенного» способа. Django каждый раз будет вызывать исключение DoesNotExist. Идиоматический способ справиться с этим в python - заключить его в try catch:
try:
go = SomeModel.objects.get(foo='bar')
except SomeModel.DoesNotExist:
go = None
Я сделал подкласс models.Manager, создал safe_get
, как в приведенном выше коде, и использовал этот менеджер для мои модели. Таким образом вы можете написать: SomeModel.objects.safe_get (foo = 'bar')
.
get()
вызывает исключениеDoesNotExist
, если объект не найден для заданных параметров. Это исключение также является атрибутом класса модели. ИсключениеDoesNotExist
наследуется отdjango.core.exceptions.ObjectDoesNotExist
Вы можете поймать исключение и присвоить None
.
from django.core.exceptions import ObjectDoesNotExist
try:
go = Content.objects.get(name="baby")
except ObjectDoesNotExist:
go = None