Fixed #32807 -- Fixed JSONField crash when redisplaying None values.
Thanks to Alex Hill for the initial patch.
This commit is contained in:
parent
66af94d56e
commit
f5ea9aa2f3
|
@ -1251,6 +1251,8 @@ class JSONField(CharField):
|
||||||
def bound_data(self, data, initial):
|
def bound_data(self, data, initial):
|
||||||
if self.disabled:
|
if self.disabled:
|
||||||
return initial
|
return initial
|
||||||
|
if data is None:
|
||||||
|
return None
|
||||||
try:
|
try:
|
||||||
return json.loads(data, cls=self.decoder)
|
return json.loads(data, cls=self.decoder)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
|
|
|
@ -97,6 +97,21 @@ class JSONFieldTest(SimpleTestCase):
|
||||||
form = JSONForm({'json_field': '["bar"]'}, initial={'json_field': ['foo']})
|
form = JSONForm({'json_field': '["bar"]'}, initial={'json_field': ['foo']})
|
||||||
self.assertIn('["foo"]</textarea>', form.as_p())
|
self.assertIn('["foo"]</textarea>', form.as_p())
|
||||||
|
|
||||||
|
def test_redisplay_none_input(self):
|
||||||
|
class JSONForm(Form):
|
||||||
|
json_field = JSONField(required=True)
|
||||||
|
|
||||||
|
tests = [
|
||||||
|
{},
|
||||||
|
{'json_field': None},
|
||||||
|
]
|
||||||
|
for data in tests:
|
||||||
|
with self.subTest(data=data):
|
||||||
|
form = JSONForm(data)
|
||||||
|
self.assertEqual(form['json_field'].value(), 'null')
|
||||||
|
self.assertIn('null</textarea>', form.as_p())
|
||||||
|
self.assertEqual(form.errors['json_field'], ['This field is required.'])
|
||||||
|
|
||||||
def test_redisplay_wrong_input(self):
|
def test_redisplay_wrong_input(self):
|
||||||
"""
|
"""
|
||||||
Displaying a bound form (typically due to invalid input). The form
|
Displaying a bound form (typically due to invalid input). The form
|
||||||
|
|
Loading…
Reference in New Issue