在中出现一些相关的定义
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不带任何参数的新鲜实例给构造函数,我认为在monkeypatching一个新字段上应该就像手动插入进入
base_fields。
ContactForm.another_field = forms.CharField(...)ContactForm.base_fields['another_field'] = ContactForm.another_field
每个表单实例,然后得到一个
deepcopy的
base_fields变成
form_instance.fields中
__init__的方法
baseForm。HTH。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)