いくつかの適切な定義はで発生しdjango/forms/forms.py
ます。彼らです:
class BaseForm
class Form
class DeclarativeFieldsMetaclass
def get_declared_fields
get_declared_fields
から呼び出さDeclarativeFieldsMetaclass
れ、作成カウンターでソートされたフィールドインスタンスを使用してリストを作成します。次に、基本クラスのフィールドをこのリストの前に追加OrderedDict
し、フィールド名がキーとして機能するインスタンスとして結果を返します。DeclarativeFieldsMetaclass
次に、この値を属性base_fields
に固定し、を呼び出してtype
クラスを作成します。次に、クラスをのmedia_property
関数に渡しwidgets.py
、戻り値をmedia
新しいクラスの属性に付加します。
media_property
アクセスごとにメディア宣言を再構築するプロパティメソッドを返します。ここでは関係ないのではないかと思いますが、間違っている可能性があります。
いずれにせよ、Media
属性を宣言していない場合(および基本クラスのいずれも宣言していない場合)Media
、コンストラクターへの引数のない新しいインスタンスのみが返されます。新しいフィールドにモンキーパッチを適用するのは、手動で挿入するのと同じくらい簡単なはずです。フィールドにbase_fields
。
ContactForm.another_field = forms.CharField(...)
ContactForm.base_fields['another_field'] = ContactForm.another_field
次に、各フォームインスタンスは、のメソッドに含まれるdeepcopy
のを取得します。HTH。base_fields
form_instance.fields
__init__
BaseForm