【发布时间】:2018-02-08 00:32:38
【问题描述】:
我试图了解 Django 表单集的内部是如何工作的。
formset_factory函数创建formset类后,从BaseFormSet继承/获取属性,初始化新创建的类的一个对象,例如:
ArticleFormSet = formset_factory(ArticleFormA, extra=2)
formset = ArticleFormSet()
如果我检查dir(formset) form 和 forms 属性都可用,但如果我尝试打印forms 什么都没有打印,我想这与装饰器@cached_property有关(但何时调用?)
在formset对象的初始化中,没有与forms属性相关的操作。
所以,我想是在调用 {{formset}} 或 {{formset.as_p}} 等时调用的。
方法有:
forms = ' '.join(form.as_p() for form in self)
为什么在self中,我不明白,因为基于dir()的form只是一个类,而self是formset对象。背后的逻辑是什么?
(PS 我明白每个表单都在做什么),但不是表单中的表单,除了现在填充表单的事实
然后,使用之前的 management_form 创建字段。
return mark_safe('\n'.join([six.text_type(self.management_form), forms]))
【问题讨论】:
标签: django forms formset formsets