私はDjangoのフォームセットの内部がどのように動作するかを理解しようとします。Djangoとformsets
フォームセットクラスがBaseFormSetから属性を取得/継承し、formset_factory機能によって作成された後、新たに作成したクラスのオブジェクトが初期化され、例:
ArticleFormSet = formset_factory(ArticleFormA, extra=2)
formset = ArticleFormSet()
私はdir(formset)
で両方のフォームをチェックして、属性を形成した場合利用可能であるが、私はforms
何も印刷されない印刷しようとするならば、私はこれはforms
属性に関連する一切の業務がないフォームセットオブジェクトの初期化にデコレータ@cached_property
(ただし、呼び出されたとき?)
に関連していると仮定します。
{{formset}}や{{formset.as_p}}などが呼び出されたときに呼び出されるとします。
方法があります:
forms = ' '.join(form.as_p() for form in self)
なぜ自己中、私は理解していない、()ディレクトリに基づいてフォームがちょうどクラスであり、かつ自己フォームセットオブジェクトであるためです。何が背後にあるロジックですか?
(私はすべてのフォームに行くやっているPS理解)が、実際の形は今
を移入され、その後、フィールドはその前にmanagement_formを使用して作成されているほか、フォームで形成されていません。 Pythonで実装されている方法を反復可能なクラスである特殊な方法self.__iter__()
、への呼び出しで
return mark_safe('\n'.join([six.text_type(self.management_form), forms]))