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