Django: Куда “DoesNotExist” прибывает из?

Все время в Django я вижу DoesNotExist быть повышенным как в db.models.fields.related.py. Нет ObjectDoesNotExist который определяется в django.core.exceptions, но просто DoesNotExist. Где этот класс исключений определяется, или я не полностью понимаю исключения? Я проверил, что это не находится в исключениях (по крайней мере, не, что я знаю о). Я смущен, очевидно.

Примечание: Это также прибывает свободное, как атрибут образцового экземпляра подкласса, как 'self.someforeignkey. DoesNotExist. Как это возможно?

39
задан orokusaki 10 June 2010 в 15:23
поделиться

2 ответа

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,), {}))
56
ответ дан 27 November 2019 в 02:40
поделиться

неотъемно , как NeadingObjectSreathered , является атрибутом на модель класса. Он добавляется к модели, когда модель генерируется.

Редактировать: метакласс, ответственный за этот процесс, составляет ModelBase ( django.db.models.base ), и вы можете посмотреть на него, чтобы увидеть, что происходит.

7
ответ дан 27 November 2019 в 02:40
поделиться
Другие вопросы по тегам:

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