Removed forced typecasting of help_text/label Field arguments
In any case, setting those variables to non-ascii utf-8 bytestrings is now considered a programming error.
This commit is contained in:
parent
d9b12ecbe6
commit
066bf42675
|
@ -61,7 +61,7 @@ class Field(object):
|
||||||
creation_counter = 0
|
creation_counter = 0
|
||||||
|
|
||||||
def __init__(self, required=True, widget=None, label=None, initial=None,
|
def __init__(self, required=True, widget=None, label=None, initial=None,
|
||||||
help_text=None, error_messages=None, show_hidden_initial=False,
|
help_text='', error_messages=None, show_hidden_initial=False,
|
||||||
validators=[], localize=False):
|
validators=[], localize=False):
|
||||||
# required -- Boolean that specifies whether the field is required.
|
# required -- Boolean that specifies whether the field is required.
|
||||||
# True by default.
|
# True by default.
|
||||||
|
@ -82,14 +82,9 @@ class Field(object):
|
||||||
# hidden widget with initial value after widget.
|
# hidden widget with initial value after widget.
|
||||||
# validators -- List of addtional validators to use
|
# validators -- List of addtional validators to use
|
||||||
# localize -- Boolean that specifies if the field should be localized.
|
# localize -- Boolean that specifies if the field should be localized.
|
||||||
if label is not None:
|
|
||||||
label = smart_text(label)
|
|
||||||
self.required, self.label, self.initial = required, label, initial
|
self.required, self.label, self.initial = required, label, initial
|
||||||
self.show_hidden_initial = show_hidden_initial
|
self.show_hidden_initial = show_hidden_initial
|
||||||
if help_text is None:
|
self.help_text = help_text
|
||||||
self.help_text = ''
|
|
||||||
else:
|
|
||||||
self.help_text = smart_text(help_text)
|
|
||||||
widget = widget or self.widget
|
widget = widget or self.widget
|
||||||
if isinstance(widget, type):
|
if isinstance(widget, type):
|
||||||
widget = widget()
|
widget = widget()
|
||||||
|
@ -739,7 +734,7 @@ class ChoiceField(Field):
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, choices=(), required=True, widget=None, label=None,
|
def __init__(self, choices=(), required=True, widget=None, label=None,
|
||||||
initial=None, help_text=None, *args, **kwargs):
|
initial=None, help_text='', *args, **kwargs):
|
||||||
super(ChoiceField, self).__init__(required=required, widget=widget, label=label,
|
super(ChoiceField, self).__init__(required=required, widget=widget, label=label,
|
||||||
initial=initial, help_text=help_text, *args, **kwargs)
|
initial=initial, help_text=help_text, *args, **kwargs)
|
||||||
self.choices = choices
|
self.choices = choices
|
||||||
|
@ -999,7 +994,7 @@ class MultiValueField(Field):
|
||||||
class FilePathField(ChoiceField):
|
class FilePathField(ChoiceField):
|
||||||
def __init__(self, path, match=None, recursive=False, allow_files=True,
|
def __init__(self, path, match=None, recursive=False, allow_files=True,
|
||||||
allow_folders=False, required=True, widget=None, label=None,
|
allow_folders=False, required=True, widget=None, label=None,
|
||||||
initial=None, help_text=None, *args, **kwargs):
|
initial=None, help_text='', *args, **kwargs):
|
||||||
self.path, self.match, self.recursive = path, match, recursive
|
self.path, self.match, self.recursive = path, match, recursive
|
||||||
self.allow_files, self.allow_folders = allow_files, allow_folders
|
self.allow_files, self.allow_folders = allow_files, allow_folders
|
||||||
super(FilePathField, self).__init__(choices=(), required=required,
|
super(FilePathField, self).__init__(choices=(), required=required,
|
||||||
|
|
|
@ -935,7 +935,7 @@ class ModelChoiceField(ChoiceField):
|
||||||
|
|
||||||
def __init__(self, queryset, empty_label="---------", cache_choices=False,
|
def __init__(self, queryset, empty_label="---------", cache_choices=False,
|
||||||
required=True, widget=None, label=None, initial=None,
|
required=True, widget=None, label=None, initial=None,
|
||||||
help_text=None, to_field_name=None, *args, **kwargs):
|
help_text='', to_field_name=None, *args, **kwargs):
|
||||||
if required and (initial is not None):
|
if required and (initial is not None):
|
||||||
self.empty_label = None
|
self.empty_label = None
|
||||||
else:
|
else:
|
||||||
|
@ -1031,7 +1031,7 @@ class ModelMultipleChoiceField(ModelChoiceField):
|
||||||
|
|
||||||
def __init__(self, queryset, cache_choices=False, required=True,
|
def __init__(self, queryset, cache_choices=False, required=True,
|
||||||
widget=None, label=None, initial=None,
|
widget=None, label=None, initial=None,
|
||||||
help_text=None, *args, **kwargs):
|
help_text='', *args, **kwargs):
|
||||||
super(ModelMultipleChoiceField, self).__init__(queryset, None,
|
super(ModelMultipleChoiceField, self).__init__(queryset, None,
|
||||||
cache_choices, required, widget, label, initial, help_text,
|
cache_choices, required, widget, label, initial, help_text,
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
|
@ -952,12 +952,12 @@ class FormsTestCase(TestCase):
|
||||||
class UserRegistration(Form):
|
class UserRegistration(Form):
|
||||||
username = CharField(max_length=10, label='Your username')
|
username = CharField(max_length=10, label='Your username')
|
||||||
password1 = CharField(widget=PasswordInput)
|
password1 = CharField(widget=PasswordInput)
|
||||||
password2 = CharField(widget=PasswordInput, label='Password (again)')
|
password2 = CharField(widget=PasswordInput, label='Contraseña (de nuevo)')
|
||||||
|
|
||||||
p = UserRegistration(auto_id=False)
|
p = UserRegistration(auto_id=False)
|
||||||
self.assertHTMLEqual(p.as_ul(), """<li>Your username: <input type="text" name="username" maxlength="10" /></li>
|
self.assertHTMLEqual(p.as_ul(), """<li>Your username: <input type="text" name="username" maxlength="10" /></li>
|
||||||
<li>Password1: <input type="password" name="password1" /></li>
|
<li>Password1: <input type="password" name="password1" /></li>
|
||||||
<li>Password (again): <input type="password" name="password2" /></li>""")
|
<li>Contraseña (de nuevo): <input type="password" name="password2" /></li>""")
|
||||||
|
|
||||||
# Labels for as_* methods will only end in a colon if they don't end in other
|
# Labels for as_* methods will only end in a colon if they don't end in other
|
||||||
# punctuation already.
|
# punctuation already.
|
||||||
|
@ -979,14 +979,6 @@ class FormsTestCase(TestCase):
|
||||||
<p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" /></p>
|
<p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" /></p>
|
||||||
<p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" /></p>""")
|
<p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" /></p>""")
|
||||||
|
|
||||||
# A label can be a Unicode object or a bytestring with special characters.
|
|
||||||
class UserRegistration(Form):
|
|
||||||
username = CharField(max_length=10, label='ŠĐĆŽćžšđ')
|
|
||||||
password = CharField(widget=PasswordInput, label='\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
|
||||||
|
|
||||||
p = UserRegistration(auto_id=False)
|
|
||||||
self.assertHTMLEqual(p.as_ul(), '<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="text" name="username" maxlength="10" /></li>\n<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="password" name="password" /></li>')
|
|
||||||
|
|
||||||
# If a label is set to the empty string for a field, that field won't get a label.
|
# If a label is set to the empty string for a field, that field won't get a label.
|
||||||
class UserRegistration(Form):
|
class UserRegistration(Form):
|
||||||
username = CharField(max_length=10, label='')
|
username = CharField(max_length=10, label='')
|
||||||
|
@ -1246,20 +1238,20 @@ class FormsTestCase(TestCase):
|
||||||
# You can specify descriptive text for a field by using the 'help_text' argument)
|
# You can specify descriptive text for a field by using the 'help_text' argument)
|
||||||
class UserRegistration(Form):
|
class UserRegistration(Form):
|
||||||
username = CharField(max_length=10, help_text='e.g., user@example.com')
|
username = CharField(max_length=10, help_text='e.g., user@example.com')
|
||||||
password = CharField(widget=PasswordInput, help_text='Choose wisely.')
|
password = CharField(widget=PasswordInput, help_text='Wählen Sie mit Bedacht.')
|
||||||
|
|
||||||
p = UserRegistration(auto_id=False)
|
p = UserRegistration(auto_id=False)
|
||||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
||||||
<li>Password: <input type="password" name="password" /> <span class="helptext">Choose wisely.</span></li>""")
|
<li>Password: <input type="password" name="password" /> <span class="helptext">Wählen Sie mit Bedacht.</span></li>""")
|
||||||
self.assertHTMLEqual(p.as_p(), """<p>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></p>
|
self.assertHTMLEqual(p.as_p(), """<p>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></p>
|
||||||
<p>Password: <input type="password" name="password" /> <span class="helptext">Choose wisely.</span></p>""")
|
<p>Password: <input type="password" name="password" /> <span class="helptext">Wählen Sie mit Bedacht.</span></p>""")
|
||||||
self.assertHTMLEqual(p.as_table(), """<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /><br /><span class="helptext">e.g., user@example.com</span></td></tr>
|
self.assertHTMLEqual(p.as_table(), """<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" /><br /><span class="helptext">e.g., user@example.com</span></td></tr>
|
||||||
<tr><th>Password:</th><td><input type="password" name="password" /><br /><span class="helptext">Choose wisely.</span></td></tr>""")
|
<tr><th>Password:</th><td><input type="password" name="password" /><br /><span class="helptext">Wählen Sie mit Bedacht.</span></td></tr>""")
|
||||||
|
|
||||||
# The help text is displayed whether or not data is provided for the form.
|
# The help text is displayed whether or not data is provided for the form.
|
||||||
p = UserRegistration({'username': 'foo'}, auto_id=False)
|
p = UserRegistration({'username': 'foo'}, auto_id=False)
|
||||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
||||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /> <span class="helptext">Choose wisely.</span></li>""")
|
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /> <span class="helptext">Wählen Sie mit Bedacht.</span></li>""")
|
||||||
|
|
||||||
# help_text is not displayed for hidden fields. It can be used for documentation
|
# help_text is not displayed for hidden fields. It can be used for documentation
|
||||||
# purposes, though.
|
# purposes, though.
|
||||||
|
@ -1272,13 +1264,6 @@ class FormsTestCase(TestCase):
|
||||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
||||||
<li>Password: <input type="password" name="password" /><input type="hidden" name="next" value="/" /></li>""")
|
<li>Password: <input type="password" name="password" /><input type="hidden" name="next" value="/" /></li>""")
|
||||||
|
|
||||||
# Help text can include arbitrary Unicode characters.
|
|
||||||
class UserRegistration(Form):
|
|
||||||
username = CharField(max_length=10, help_text='ŠĐĆŽćžšđ')
|
|
||||||
|
|
||||||
p = UserRegistration(auto_id=False)
|
|
||||||
self.assertHTMLEqual(p.as_ul(), '<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</span></li>')
|
|
||||||
|
|
||||||
def test_subclassing_forms(self):
|
def test_subclassing_forms(self):
|
||||||
# You can subclass a Form to add fields. The resulting form subclass will have
|
# You can subclass a Form to add fields. The resulting form subclass will have
|
||||||
# all of the fields of the parent Form, plus whichever fields you define in the
|
# all of the fields of the parent Form, plus whichever fields you define in the
|
||||||
|
|
Loading…
Reference in New Issue