Django:“NotNotist”来自哪里?
在Django的所有时间,我看到DoesNotExist
像db.models.fields.related.py
一样被引发。 不是在django.core.exceptions
定义的ObjectDoesNotExist
,而只是DoesNotExist
。 这个exception类是在哪里定义的,还是我没有完全理解exception? 我已经检查过它没有例外(至less不是我所知道的)。 我很困惑。
注意:它也是免费的,作为模型子类实例的属性,比如`self.someforeignkey.DoesNotExist。 这怎么可能?
DoesNotExist
logging在这里 :
DoesNotExistexceptioninheritance自django.core.exceptions.ObjectDoesNotExist,因此您可以定位多个DoesNotExistexception。
因此except ObjectDoesNotExist:
,您可以很好地使用它except ObjectDoesNotExist:
捕获可能在try
子句中引发的所有特定于模型的DoesNotExist
exception,或者使用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
),你可以看看它是怎么回事。