8

我一直在编写我的前几个 Django 模型,并想看看所有模型扩展的基类(例如:“class Poll(models.Model”)但找不到 Model 基类。我检查了github 上的源代码当我浏览到django.db.models目录时,我很惊讶没有找到可以查看的“Model.py”文件。这个文件是生成的吗?还是模型类存在于其他地方?或者有一些 python我不熟悉的包装魔术?

4

2 回答 2

8

如前所述,Python 不是 Java。特别是,Python 中没有任何内容说类必须存在于与该类同名的文件中。

正如 San4ez 指出的那样,Model该类位于 . 中django.db.models.base,并被导入到该__init__.py目录中的文件中,以便可以直接将其引用为models.Model. 这不是任何魔法,只是普通的惯用 ​​Python。

然而,一旦你查看了类本身的代码,你会发现它实际上包含了很多 Python 魔法,尤其是元类。但这是一个不同的问题。

于 2012-04-14T14:36:27.307 回答
3

https://github.com/django/django/blob/master/django/db/models/__init__.py

from django.db.models.base import Model

所以Model那里描述了类https://github.com/django/django/blob/master/django/db/models/base.py

从字面上看,您可以通过这种方式将模型导入from django.db.models.base import Model您的项目。但是 django 核心开发人员决定隐藏一些服务类,将一些导入到django.db.models包中,并为您提供更短的导入。

于 2012-04-14T14:07:10.820 回答