From 73d62743e9cc27f09a5e30bcf7b0dbe64d6108de Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Thu, 11 Jan 2007 00:04:27 +0000 Subject: [PATCH] newforms: Added unit tests and docs explaining that clean_data will only ever contain fields of the form, even if extra fields are passed in data git-svn-id: http://code.djangoproject.com/svn/django/trunk@4306 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- docs/newforms.txt | 18 ++++++++++++++++++ tests/regressiontests/forms/tests.py | 11 +++++++++++ 2 files changed, 29 insertions(+) diff --git a/docs/newforms.txt b/docs/newforms.txt index b4da35ecd4..88485a7b8c 100644 --- a/docs/newforms.txt +++ b/docs/newforms.txt @@ -254,6 +254,24 @@ If your data does *not* validate, your ``Form`` instance will not have a ... AttributeError: 'ContactForm' object has no attribute 'clean_data' +``clean_data`` will always *only* contain a key for fields defined in the +``Form``, even if you pass extra data when you define the ``Form``. In this +example, we pass a bunch of extra fields to the ``ContactForm`` constructor, +but ``clean_data`` contains only the form's fields:: + + >>> data = {'subject': 'hello', + ... 'message': 'Hi there', + ... 'sender': 'foo@example.com', + ... 'cc_myself': True, + ... 'extra_field_1': 'foo', + ... 'extra_field_2': 'bar', + ... 'extra_field_3': 'baz'} + >>> f = ContactForm(data) + >>> f.is_valid() + True + >>> f.clean_data # Doesn't contain extra_field_1, etc. + {'cc_myself': True, 'message': u'Hi there', 'sender': u'foo@example.com', 'subject': u'hello'} + Behavior of unbound forms ~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index d185f1ceb8..1fc6b3253f 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -1647,6 +1647,17 @@ u'* This field is required.' >>> print p['birthday'] +clean_data will always *only* contain a key for fields defined in the +Form, even if you pass extra data when you define the Form. In this +example, we pass a bunch of extra fields to the form constructor, +but clean_data contains only the form's fields. +>>> data = {'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9', 'extra1': 'hello', 'extra2': 'hello'} +>>> p = Person(data) +>>> p.is_valid() +True +>>> p.clean_data +{'first_name': u'John', 'last_name': u'Lennon', 'birthday': datetime.date(1940, 10, 9)} + "auto_id" tells the Form to add an "id" attribute to each form element. If it's a string that contains '%s', Django will use that as a format string into which the field's name will be inserted. It will also put a