软件介绍:在Django中,我总是看到DoesNotExist像db.models.fields.related.py一样被抛出。不是django.core.except...
在Django中,我总是看到DoesNotExist像db.models.fields.related.py一样被抛出。不是django.core.exceptions中定义的ObjectDoesNotExist,而是DoesNotExist。这个异常类在哪里定义的,或者我没有完全理解异常?我已经检查过它不在异常中(至少我不知道)。我很困惑。
注意:它也是免费的,作为模型子类示例的属性,如`self.someforeignkey.DoesNotExist。这是怎么可能的?
DoesNotExist的文档如下:
DoesNotExist异常继承自django.core.exceptions.ObjectDoesNotExist,因此您可以针对多个DoesNotExist异常。
因此,您可以很好地使用except ObjectDoesNotExist:并捕获可能在try子句中引发的所有特定于模型的DoesNotExist异常,或者在您想要更具体时使用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,), {}))
DoesNotExist,就像MultipleObjectsReturned一样,是模型类上的一个属性。它在模型生成时被添加到模型中。
编辑:负责这个过程的元类是ModelBase(django.db.models.base),你可以看看它,看看发生了什么。