一些相关的定义出现在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
函数 inwidgets.py
并将返回值附加到media
新类的属性上。
media_property
返回一个属性方法,该方法在每次访问时重构媒体声明。我的感觉是它在这里不相关,但我可能是错的。
无论如何,如果你没有声明一个Media
属性(并且没有一个基类这样做),那么它只会返回一个Media
没有参数的新实例给构造函数,我认为猴子修补一个新字段应该像手动插入一样简单字段进入base_fields
.
ContactForm.another_field = forms.CharField(...)
ContactForm.base_fields['another_field'] = ContactForm.another_field
然后每个表单实例都会在 的deepcopy
方法中base_fields
得到一个。HTH。form_instance.fields
__init__
BaseForm