oro*_*aki 39 django django-models
在Django的所有时间我都看到DoesNotExist像是在一起被提升db.models.fields.related.py.没有ObjectDoesNotExist定义django.core.exceptions,但只是DoesNotExist.这个异常类在哪里定义,或者我不完全理解异常?我已经检查过它不是例外(至少不是我所知道的).我很困惑.
注意:它也是免费的,作为模型子类实例的属性,如`self.someforeignkey.DoesNotExist.这怎么可能?
Ale*_*lli 56
DoesNotExist记录在这里:
DoesNotExist异常继承自django.core.exceptions.ObjectDoesNotExist,因此您可以定位多个DoesNotExist异常.
因此,您可以很好地使用except ObjectDoesNotExist:并捕获DoesNotExist可能在try子句中引发的所有特定于模型的异常,或者except 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,), {}))
Run Code Online (Sandbox Code Playgroud)
DoesNotExist就像MultipleObjectsReturned,是模型类的属性.在生成模型时将其添加到模型中.
编辑:负责此过程的元类是ModelBase(django.db.models.base),您可以查看它以查看发生了什么.