diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-02 07:03:33 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-02 07:03:33 +0000 |
| commit | fbf5eaac9460a0f97187b80c9ac16b9aa023802e (patch) | |
| tree | 94569c7763cebdeafd3564e87f88a9a146387a16 /tests/regressiontests/forms/forms.py | |
| parent | e43ace720cad6e0f000332e9dc4cba8af4be3bf6 (diff) | |
Fixed #10349 -- Modified ManyToManyFields to allow initial form values to be callables. Thanks to fas for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10652 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/forms/forms.py')
| -rw-r--r-- | tests/regressiontests/forms/forms.py | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/regressiontests/forms/forms.py b/tests/regressiontests/forms/forms.py index 642cd203ca..bf9623fe77 100644 --- a/tests/regressiontests/forms/forms.py +++ b/tests/regressiontests/forms/forms.py @@ -1146,37 +1146,63 @@ possible to specify callable data. >>> class UserRegistration(Form): ... username = CharField(max_length=10) ... password = CharField(widget=PasswordInput) +... options = MultipleChoiceField(choices=[('f','foo'),('b','bar'),('w','whiz')]) We need to define functions that get called later. >>> def initial_django(): ... return 'django' >>> def initial_stephane(): ... return 'stephane' +>>> def initial_options(): +... return ['f','b'] +>>> def initial_other_options(): +... return ['b','w'] + Here, we're not submitting any data, so the initial value will be displayed. ->>> p = UserRegistration(initial={'username': initial_django}, auto_id=False) +>>> p = UserRegistration(initial={'username': initial_django, 'options': initial_options}, auto_id=False) >>> print p.as_ul() <li>Username: <input type="text" name="username" value="django" maxlength="10" /></li> <li>Password: <input type="password" name="password" /></li> +<li>Options: <select multiple="multiple" name="options"> +<option value="f" selected="selected">foo</option> +<option value="b" selected="selected">bar</option> +<option value="w">whiz</option> +</select></li> The 'initial' parameter is meaningless if you pass data. ->>> p = UserRegistration({}, initial={'username': initial_django}, auto_id=False) +>>> p = UserRegistration({}, initial={'username': initial_django, 'options': initial_options}, auto_id=False) >>> print p.as_ul() <li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li> <li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li> +<li><ul class="errorlist"><li>This field is required.</li></ul>Options: <select multiple="multiple" name="options"> +<option value="f">foo</option> +<option value="b">bar</option> +<option value="w">whiz</option> +</select></li> >>> p = UserRegistration({'username': u''}, initial={'username': initial_django}, auto_id=False) >>> print p.as_ul() <li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li> <li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li> ->>> p = UserRegistration({'username': u'foo'}, initial={'username': initial_django}, auto_id=False) +<li><ul class="errorlist"><li>This field is required.</li></ul>Options: <select multiple="multiple" name="options"> +<option value="f">foo</option> +<option value="b">bar</option> +<option value="w">whiz</option> +</select></li> +>>> p = UserRegistration({'username': u'foo', 'options':['f','b']}, initial={'username': initial_django}, auto_id=False) >>> print p.as_ul() <li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li> <li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li> +<li>Options: <select multiple="multiple" name="options"> +<option value="f" selected="selected">foo</option> +<option value="b" selected="selected">bar</option> +<option value="w">whiz</option> +</select></li> A callable 'initial' value is *not* used as a fallback if data is not provided. In this example, we don't provide a value for 'username', and the form raises a validation error rather than using the initial value for 'username'. ->>> p = UserRegistration({'password': 'secret'}, initial={'username': initial_django}) +>>> p = UserRegistration({'password': 'secret'}, initial={'username': initial_django, 'options': initial_options}) >>> p.errors['username'] [u'This field is required.'] >>> p.is_valid() @@ -1187,14 +1213,26 @@ then the latter will get precedence. >>> class UserRegistration(Form): ... username = CharField(max_length=10, initial=initial_django) ... password = CharField(widget=PasswordInput) +... options = MultipleChoiceField(choices=[('f','foo'),('b','bar'),('w','whiz')], initial=initial_other_options) + >>> p = UserRegistration(auto_id=False) >>> print p.as_ul() <li>Username: <input type="text" name="username" value="django" maxlength="10" /></li> <li>Password: <input type="password" name="password" /></li> ->>> p = UserRegistration(initial={'username': initial_stephane}, auto_id=False) +<li>Options: <select multiple="multiple" name="options"> +<option value="f">foo</option> +<option value="b" selected="selected">bar</option> +<option value="w" selected="selected">whiz</option> +</select></li> +>>> p = UserRegistration(initial={'username': initial_stephane, 'options': initial_options}, auto_id=False) >>> print p.as_ul() <li>Username: <input type="text" name="username" value="stephane" maxlength="10" /></li> <li>Password: <input type="password" name="password" /></li> +<li>Options: <select multiple="multiple" name="options"> +<option value="f" selected="selected">foo</option> +<option value="b" selected="selected">bar</option> +<option value="w">whiz</option> +</select></li> # Help text ################################################################### |
