私は最初のいくつかの Django モデルを作成しており、すべてのモデルが拡張する基本クラス (例: "class Poll(models.Model")) を見てみたかったのですが、Model 基本クラスが見つかりませんでした。github でソースを確認しました。そして、 django.db.modelsディレクトリをブラウズしたとき、私が見ることができる「Model.py」ファイルが見つからないことに驚きました.このファイルは生成されていますか?それともクラス Model は別の場所にあるのでしょうか?それとも python がありますか?私がよく知らないパッケージマジックが進行中ですか?
2 に答える
前に述べたように、Python は Java ではありません。特に、Python には、クラスがクラスと同じ名前のファイルに存在しなければならないということは何もありません。
San4ez が指摘しているように、Model
クラスは に存在し、そのディレクトリdjango.db.models.base
内のファイルにインポートされる__init__.py
ため、 として直接参照できますmodels.Model
。これは魔法のようなものではなく、通常の慣用的な Python です。
しかし、クラス自体のコードを調べると、実際には非常に多くの Python マジックで構成されていることがわかります。具体的には、メタクラスに関するものです。しかし、それは別の質問です。
の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
パッケージにインポートして、より短いインポートを使用できるようにすることにしました。