2017-12-17 7 views
0

djangoモデルのクエリでは、私はそれの逐次実行を知りたいです。クエリBlog.objects.get(name='palm')を考えてみましょう。 Blogが定義されているこの場所では、models.pyのクラスblogと同じですか? オブジェクトとは何ですか?私はこれに関連するものはdjangoのソースファイルでは見つかりません。 Blogがクラスの場合、タイプはobjectsとなりますか?djangoモデルクエリを実行していますか?

私は開発側のコンセプトを望みます。いずれも、ジャンゴがこれらを可能にする方法を説明できますか?

答えて

2

すべて非抽象的 Djangoモデルクラスには、(明示的に削除しない限り)属性objectsが添付されています。

objectは、Managerです。これは、クエリを構築してデータベースに送信してデータを取得/格納するための多くのメソッドを持つオブジェクトです。

Blogクラスのマネージャobjectsに最初にアクセスし、次に.get(name='palm')と呼び出します。これは、Djangoがこれをクエリに変換することを意味します。これは、使用するデータベースシステムによって異なります。それは、MySQLの場合たとえば、同じようにはなります

SELECT name, some, other columns 
FROM app_blog 
WHERE name = 'palm' 

データベースは、ゼロ、1つまたは複数の行で応答し、Djangoは、発見されないか、または複数の行の場合には、調達ませんDoesNotExistsまたはMultipleObjectsReturnedエラー。それ以外の場合は、データをBlogオブジェクトにロードします(列をデシリアライズしてPythonオブジェクトにデコードします)。

+0

はい、わかりました。これは私が探していた答えではありません。私は設計コンセプトを知りたい。 PythonにはManagerはありません、そうですか?マネージャは、Pythonクラスか何かになりますか? 'objects'は' Manager'のオブジェクトを意味し、それはできませんか? –

+0

djangoはどのようにオブジェクトの属性をクラスモデルに割り当てるか?どんなタイプの属性ですか、それは他のクラスのクラスインスタンスですか? –

+0

@mcvishnu:はいリンクをクリックすると、 'Manager'オブジェクトに関するドキュメントが表示されます。 Pythonでは、属性をクラスに割り当てることができます。継承またはメタクラスプログラミング。 PythonはOOプログラミングをサポートしていますが、OOプログラミング言語ではありません。要件ではありません。 –

関連する問題