Login
网站首页 > 文章中心 > 其它

Django“doesnotexist”从何而来?

作者:小编 更新时间:2023-06-08 17:15:22 浏览量:61人看过

Django“doesnotexist”从何而来?

软件介绍:在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),你可以看看它,看看发生了什么。


版权声明:倡导尊重与保护知识产权,本站有部分资源、图片来源于网络,如有侵权,请联系我们修改或者删除处理。
转载请说明来源于"土嘎嘎" 本文地址:http://www.tugaga.com/jishu/other/271.html
<<上一篇 2023-06-08
下一篇 >> 2023-06-08

编辑推荐

热门文章