Fixed #28534 -- Made JSONField.has_changed() ignore key order and consider True/1 values as different.
This commit is contained in:
parent
bdb747a5f2
commit
1907fc9b12
|
@ -52,3 +52,11 @@ class JSONField(forms.CharField):
|
|||
if isinstance(value, InvalidJSONInput):
|
||||
return value
|
||||
return json.dumps(value)
|
||||
|
||||
def has_changed(self, initial, data):
|
||||
if super().has_changed(initial, data):
|
||||
return True
|
||||
# For purposes of seeing whether something has changed, True isn't the
|
||||
# same as 1 and the order of keys doesn't matter.
|
||||
data = self.to_python(data)
|
||||
return json.dumps(initial, sort_keys=True) != json.dumps(data, sort_keys=True)
|
||||
|
|
|
@ -410,3 +410,8 @@ class TestFormField(PostgreSQLTestCase):
|
|||
for json_string in tests:
|
||||
val = field.clean(json_string)
|
||||
self.assertEqual(field.clean(val), val)
|
||||
|
||||
def test_has_changed(self):
|
||||
field = forms.JSONField()
|
||||
self.assertIs(field.has_changed({'a': True}, '{"a": 1}'), True)
|
||||
self.assertIs(field.has_changed({'a': 1, 'b': 2}, '{"b": 2, "a": 1}'), False)
|
||||
|
|
Loading…
Reference in New Issue