Django:“NotNotist”来自哪里?

在Django的所有时间,我看到DoesNotExistdb.models.fields.related.py一样被引发。 不是在django.core.exceptions定义的ObjectDoesNotExist ,而只是DoesNotExist 。 这个exception类是在哪里定义的,还是我没有完全理解exception? 我已经检查过它没有例外(至less不是我所知道的)。 我很困惑。

注意:它也是免费的,作为模型子类实例的属性,比如`self.someforeignkey.DoesNotExist。 这怎么可能?

DoesNotExistlogging在这里 :

DoesNotExistexceptioninheritance自django.core.exceptions.ObjectDoesNotExist,因此您可以定位多个DoesNotExistexception。

因此except ObjectDoesNotExist: ,您可以很好地使用它except ObjectDoesNotExist:捕获可能在try子句中引发的所有特定于模型的DoesNotExistexception,或者使用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一样,是模型类的一个属性。 在生成模型时将其添加到模型中。

编辑:负责这个过程的元类是ModelBasedjango.db.models.base ),你可以看看它是怎么回事。