newforms: Split the Form class into BaseForm and Form. The former has all the Form logic; the latter just implements the metaclass that allows for declarative form definition. This change makes it easier to allow other (i.e., non-declarative) designation of a form's fields in creating a form class

git-svn-id: http://code.djangoproject.com/svn/django/trunk@4204 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-12-15 05:35:19 +00:00
parent 74a74f3766
commit 0a7d8b18ff
1 changed files with 14 additions and 4 deletions

View File

@ -32,10 +32,11 @@ class DeclarativeFieldsMetaclass(type):
attrs['fields'] = SortedDictFromList(fields) attrs['fields'] = SortedDictFromList(fields)
return type.__new__(cls, name, bases, attrs) return type.__new__(cls, name, bases, attrs)
class Form(StrAndUnicode): class BaseForm(StrAndUnicode):
"A collection of Fields, plus their associated data." # This is the main implementation of all the Form logic. Note that this
__metaclass__ = DeclarativeFieldsMetaclass # class is different than Form. See the comments by the Form class for more
# information. Any improvements to the form API should be made to *this*
# class, not to the Form class.
def __init__(self, data=None, auto_id='id_%s', prefix=None): def __init__(self, data=None, auto_id='id_%s', prefix=None):
self.ignore_errors = data is None self.ignore_errors = data is None
self.data = data or {} self.data = data or {}
@ -168,6 +169,15 @@ class Form(StrAndUnicode):
""" """
return self.clean_data return self.clean_data
class Form(BaseForm):
"A collection of Fields, plus their associated data."
# This is a separate class from BaseForm in order to abstract the way
# self.fields is specified. This class (Form) is the one that does the
# fancy metaclass stuff purely for the semantic sugar -- it allows one
# to define a form using declarative syntax.
# BaseForm itself has no way of designating self.fields.
__metaclass__ = DeclarativeFieldsMetaclass
class BoundField(StrAndUnicode): class BoundField(StrAndUnicode):
"A Field plus data" "A Field plus data"
def __init__(self, form, field, name): def __init__(self, form, field, name):