mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
[1.11.x] Fixed #28555 -- Made CharField convert whitespace-only values to the empty_value when strip is enabled.
Backport of 48c394a6fc2594891f766293afec8f86d63e1015 from master
This commit is contained in:
parent
312050df82
commit
1d1a56c599
@ -233,11 +233,12 @@ class CharField(Field):
|
|||||||
|
|
||||||
def to_python(self, value):
|
def to_python(self, value):
|
||||||
"Returns a Unicode object."
|
"Returns a Unicode object."
|
||||||
|
if value not in self.empty_values:
|
||||||
|
value = force_text(value)
|
||||||
|
if self.strip:
|
||||||
|
value = value.strip()
|
||||||
if value in self.empty_values:
|
if value in self.empty_values:
|
||||||
return self.empty_value
|
return self.empty_value
|
||||||
value = force_text(value)
|
|
||||||
if self.strip:
|
|
||||||
value = value.strip()
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def widget_attrs(self, widget):
|
def widget_attrs(self, widget):
|
||||||
|
@ -9,4 +9,5 @@ Django 1.11.6 fixes several bugs in 1.11.5.
|
|||||||
Bugfixes
|
Bugfixes
|
||||||
========
|
========
|
||||||
|
|
||||||
* ...
|
* Made the ``CharField`` form field convert whitespace-only values to the
|
||||||
|
``empty_value`` when ``strip`` is enabled (:ticket:`28555`).
|
||||||
|
@ -121,6 +121,29 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
|||||||
self.assertEqual(f.clean(' 1'), ' 1')
|
self.assertEqual(f.clean(' 1'), ' 1')
|
||||||
self.assertEqual(f.clean('1 '), '1 ')
|
self.assertEqual(f.clean('1 '), '1 ')
|
||||||
|
|
||||||
|
def test_strip_before_checking_empty(self):
|
||||||
|
"""
|
||||||
|
A whitespace-only value, ' ', is stripped to an empty string and then
|
||||||
|
converted to the empty value, None.
|
||||||
|
"""
|
||||||
|
f = CharField(required=False, empty_value=None)
|
||||||
|
self.assertIsNone(f.clean(' '))
|
||||||
|
|
||||||
|
def test_clean_non_string(self):
|
||||||
|
"""CharField.clean() calls str(value) before stripping it."""
|
||||||
|
class StringWrapper:
|
||||||
|
def __init__(self, v):
|
||||||
|
self.v = v
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.v
|
||||||
|
|
||||||
|
value = StringWrapper(' ')
|
||||||
|
f1 = CharField(required=False, empty_value=None)
|
||||||
|
self.assertIsNone(f1.clean(value))
|
||||||
|
f2 = CharField(strip=False)
|
||||||
|
self.assertEqual(f2.clean(value), ' ')
|
||||||
|
|
||||||
def test_charfield_disabled(self):
|
def test_charfield_disabled(self):
|
||||||
f = CharField(disabled=True)
|
f = CharField(disabled=True)
|
||||||
self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />')
|
self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user