From 43b2d88a5b9cfb151ccf7ac861f2750e70c0e2c4 Mon Sep 17 00:00:00 2001
From: Andrea Grandi <a.grandi@gmail.com>
Date: Sun, 24 May 2015 15:56:48 +0100
Subject: [PATCH] Fixed #24844 -- Corrected has_changed implementation for
 HStoreField.

---
 django/contrib/postgres/forms/hstore.py        | 10 ++++++++++
 django/db/backends/postgresql_psycopg2/base.py |  1 +
 tests/postgres_tests/test_hstore.py            |  6 ++++++
 3 files changed, 17 insertions(+)

diff --git a/django/contrib/postgres/forms/hstore.py b/django/contrib/postgres/forms/hstore.py
index 2c564ea53c..a138093e90 100644
--- a/django/contrib/postgres/forms/hstore.py
+++ b/django/contrib/postgres/forms/hstore.py
@@ -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)
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index af616e48c4..6c0794d92d 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -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()
diff --git a/tests/postgres_tests/test_hstore.py b/tests/postgres_tests/test_hstore.py
index e63eda46b9..9569711b3d 100644
--- a/tests/postgres_tests/test_hstore.py
+++ b/tests/postgres_tests/test_hstore.py
@@ -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):