Все время в Django я вижу DoesNotExist
быть повышенным как в db.models.fields.related.py
. Нет ObjectDoesNotExist
который определяется в django.core.exceptions
, но просто DoesNotExist
. Где этот класс исключений определяется, или я не полностью понимаю исключения? Я проверил, что это не находится в исключениях (по крайней мере, не, что я знаю о). Я смущен, очевидно.
Примечание: Это также прибывает свободное, как атрибут образцового экземпляра подкласса, как 'self.someforeignkey. DoesNotExist. Как это возможно?
DoesNotExist
документируется здесь :
Исключение DoesNotExist наследует с django.core.exceptions.ObjectDoesNotExist, чтобы вы могли нацелиться на несколько Исключения не в стиле Exxist.
для того, чтобы вы могли прекрасно использовать кроме ObjectDoesNotExist:
и перехватить все специфические для модели DoesNotExist
исключения, которые могут быть подняты в пункте try
, или использовать кроме SomeSpecificModel.DoesNotExist:
, когда вы хотите быть более точным.
Если вы ищете конкретное место в исходном коде Django, где этот атрибут добавляется в классы моделей, смотрите здесь , строки 34-37:
# Create the class.
new_class = type.__new__(cls, name, bases, {'__module__': attrs.pop('__module__')})
new_class.add_to_class('_meta', Options(attrs.pop('Meta', None)))
new_class.add_to_class('DoesNotExist', types.ClassType('DoesNotExist', (ObjectDoesNotExist,), {}))
неотъемно
, как NeadingObjectSreathered
, является атрибутом на модель класса. Он добавляется к модели, когда модель генерируется.
Редактировать: метакласс, ответственный за этот процесс, составляет ModelBase
( django.db.models.base
), и вы можете посмотреть на него, чтобы увидеть, что происходит.