Fixed #24844 -- Corrected has_changed implementation for HStoreField.

This commit is contained in:
Andrea Grandi 2015-05-24 15:56:48 +01:00 committed by Florian Apolloner
parent 9ef2615d49
commit 43b2d88a5b
3 changed files with 17 additions and 0 deletions

View File

@ -34,3 +34,13 @@ class HStoreField(forms.CharField):
for key, val in value.items():
value[key] = six.text_type(val)
return value
def has_changed(self, initial, data):
"""
Return True if data differs from initial.
"""
# For purposes of seeing whether something has changed, None is
# the same as an empty dict, if the data or initial value we get
# is None, replace it w/ {}.
initial_value = self.to_python(initial)
return super(forms.HStoreField, self).has_changed(initial_value, data)

View File

@ -199,6 +199,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
if conn_timezone_name != self.timezone_name:
cursor = self.connection.cursor()
try:
print "UPS"
cursor.execute(self.ops.set_time_zone_sql(), [self.timezone_name])
finally:
cursor.close()

View File

@ -178,6 +178,12 @@ class TestFormField(PostgresSQLTestCase):
form_field = model_field.formfield()
self.assertIsInstance(form_field, forms.HStoreField)
def test_empty_field_has_not_changed(self):
class HStoreFormTest(forms.Form):
f1 = HStoreField()
form_w_hstore = HStoreFormTest()
self.assertFalse(form_w_hstore.has_changed())
class TestValidator(PostgresSQLTestCase):