使用字段定义字段的方式
django.forms只是一种方便的声明性语法。它并不能真正代表最终Form类或其实例在属性方面的外观。
表单具有一个元类(在不深入的情况下,元类是使用
class关键字声明一个类,而
__init__方法是使用括号创建一个类的实例的方法-
一种用于自定义正在创建的对象的钩子,在这种情况下元类的“
class!”是!),它在定义时从表单类中提取字段并将其添加到
base_fields字典中。实例化表单时,会将其
base_fields深层复制到
fields实例上的属性。
令人困惑的一点是,您
.用来访问在模板中显示的字段-
实际发生的事情是Django的模板引擎首先尝试使用字典式
[]访问来解析属性查找,并且基本表单类定义了
__getitem__一种利用该方法的方法为此,从表单实例的
fieldsdict中查找适当的字段,然后用
BoundField进行包装,包装器知道如何使用该字段和表单中的数据来显示该字段。



