diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 88c9ca9f28..fcea1597ef 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -542,11 +542,7 @@ class Field(RegisterLookupMixin): return NotImplemented def __hash__(self): - return hash(( - self.creation_counter, - self.model._meta.app_label if hasattr(self, 'model') else None, - self.model._meta.model_name if hasattr(self, 'model') else None, - )) + return hash(self.creation_counter) def __deepcopy__(self, memodict): # We don't have to deepcopy very much here, since most things are not diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 5208b40dc9..86365989f0 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -128,9 +128,14 @@ class BasicFieldTests(SimpleTestCase): self.assertLess(abstract_model_field, inherit2_model_field) self.assertLess(inherit1_model_field, inherit2_model_field) - self.assertNotEqual(hash(abstract_model_field), hash(inherit1_model_field)) - self.assertNotEqual(hash(abstract_model_field), hash(inherit2_model_field)) - self.assertNotEqual(hash(inherit1_model_field), hash(inherit2_model_field)) + def test_hash_immutability(self): + field = models.IntegerField() + field_hash = hash(field) + + class MyModel(models.Model): + rank = field + + self.assertEqual(field_hash, hash(field)) class ChoicesTests(SimpleTestCase):