Как я получаю объект, если это существует или Ни один, если это не существует?

Когда я прошу, чтобы образцовый менеджер получил объект, он повышает DoesNotExist когда нет никакого соответствующего объекта.

go = Content.objects.get(name="baby")

Вместо DoesNotExist, как я могу иметь go быть None вместо этого?

192
задан daaawx 11 June 2019 в 18:05
поделиться

2 ответа

Для этого не существует «встроенного» способа. 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') .

289
ответ дан 23 November 2019 в 05:29
поделиться

Из документации django

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
32
ответ дан 23 November 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: