2017-06-06 3 views
0

私はPythonとDjangoとシリアライザについて学ぶのは初めてです。私はシリアライザクラスを定義する際に、内部にネストされたメタクラスが必要であることを確認しました。私はこのメタクラスのコンセプトに賛成できないので、私はそれについて調べて、メタクラスはクラスがインスタンスであるクラスであることを発見しました。それを読んだ後でさえ、私は混乱しています。外側のシリアライザクラスは内部メタクラスのインスタンスですか?ここでこのメタクラスを使用する必要はありますか?django:なぜ私たちはmodelSerializerの中に入れ子になったメタクラスを使用しますか?

+1

いいえ、それはまったく別の概念です。ここではいくつかの定義を持つ内部クラスです。しかし、同じ概念がDjango全体で使用されています。実際には、あなたがdjango-rest-frameworkを学ぶ前に、あなたはDjangoを学ぶべきです。あなたが持っていれば、このパターンはあなたを驚かせることはありません。 –

答えて

2

PythonのメタクラスとDjangoのメタクラスは、異なる概念です。

Googleで見つけたのは、Pythonのメタクラスです。これは、Djangoフレームワークが多くを使用していますが、ユーザーフレンドリーなコードではありません。 This blog postでは、Djangoがフレームワークのコードでメタクラスをどのように使用するかを説明します。これらのクラスが読み込まれ、特定の要素の構成を説明するモデル、フォーム、シリアライザ、ModelAdmins、等:

一方Djangoのメタクラスは、それがフレームワーク最前要素のうちのいくつかで使用される内部クラス構造体の実行時または移行時にはデータベースに保存されませんが、データベースの問題ではないためです。たとえば、フレームワークは、注文が指定されていない場合、そのモデルのQuerySetの優先順位が何であるかを知る必要があるときに、モデルのMeta構成を読み取ります。フォームは、is_validを呼び出すときに検証する必要があるフィールドを読み取ります。その他。

関連する問題