Forms
have Fields
. Fields
have a Widget
. If a Field
name is omitted, it takes the variable name specified in the form. For example,
MyForm(Form):
username = Field(name=None, widget=MyWidget(args))
The field name would become "username". However, this can't be established until the form is constructed. Would it be so awful to set the field.name
attribute inside the form initializer, but after the field has already been constructed?
Similarly, would it be so awful to set some field.widget.xxx
attributes inside the form initializer to "pass in" some variables that are used in 开发者_如何学运维various functions inside the widget class? Or should I explicitly pass them in to each and every function call? Why?
Some OO purists might perhaps object, but IMHO there is really no problem in setting public attributes in instances of other classes -- worst case, if later on you find that instance needs to take some action when certain attributes are set, you'll just turn the attribute into a property, so that a "setter method" is automatically called when the attribute is assigned to (just make sure to always use new style classes -- e.g. by inheriting from object
when a class would otherwise have no bases -- so that property
works properly when you need it!-).
精彩评论