2012-04-14 123 views
6

我一直在寫我的第一個Django的幾個模型,並想看看所有模型擴展的基類(例如:「class Poll(models.Model)」,但找不到Model基類,我檢查了source on github當我瀏覽django.db.models目錄時,我很驚訝沒有找到可以看到的「Model.py」文件,該文件是否生成?或者類Model是否存在其他地方?還是有一些python包魔術正在進行我是不熟悉?Django源代碼中的Model.py在哪裏?

回答

5

如前所述,Python不是Java。特別是,Python中沒有任何內容表明一個類必須存在於一個與類相同的文件中。

由於San4ez指出,Model類生活在django.db.models.base,並導入到__init__.py文件在該目錄中,以便它可以直接引用作爲models.Model。這不是什麼魔法,只是普通的慣用Python。

但是,一旦你查看了類本身的代碼,你會發現它實際上包含了很多Python魔法,特別是圍繞元類。但這是一個不同的問題。

+0

我發現它與你的幫助(不用謝謝github搜索)。這導致我在python約定/樣式/規則方面出現了一些相當哲學的問題,但這是另一篇文章的問題(並且在做了一些背景研究之後)。謝謝! – 2012-04-14 17:11:12

2

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

從字面上看,你可以這樣​​模型導入到項目。但django核心開發人員決定隱藏一些服務類,將一些服務導入django.db.models包,併爲您提供更短的導入。