summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJernej Kos <jernej@kos.mx>2014-12-21 11:21:37 +0100
committerJernej Kos <jernej@kos.mx>2014-12-21 17:31:50 +0100
commit7c50e7eeccd4b4581542547f5ddb603bbd62a725 (patch)
tree78636e7a5df768eec1a472471409fbd18702a830
parent07728a2c2c78b030b7de9c6b20ef028f82d6134a (diff)
Fixed #24034 -- Don't always overwrite deconstruct path.
Made deconstruct path overwriting for ArrayField conditional, so it only occurs when the deconstructed field is an instance of ArrayField itself and not a subclass.
-rw-r--r--django/contrib/postgres/fields/array.py3
-rw-r--r--tests/postgres_tests/models.py5
-rw-r--r--tests/postgres_tests/test_array.py11
3 files changed, 17 insertions, 2 deletions
diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py
index ae07f1bc0c..65f3dc6f6a 100644
--- a/django/contrib/postgres/fields/array.py
+++ b/django/contrib/postgres/fields/array.py
@@ -82,7 +82,8 @@ class ArrayField(Field):
def deconstruct(self):
name, path, args, kwargs = super(ArrayField, self).deconstruct()
- path = 'django.contrib.postgres.fields.ArrayField'
+ if path == 'django.contrib.postgres.fields.array.ArrayField':
+ path = 'django.contrib.postgres.fields.ArrayField'
kwargs.update({
'base_field': self.base_field,
'size': self.size,
diff --git a/tests/postgres_tests/models.py b/tests/postgres_tests/models.py
index a119b12f04..d6cf3da786 100644
--- a/tests/postgres_tests/models.py
+++ b/tests/postgres_tests/models.py
@@ -32,3 +32,8 @@ class CharFieldModel(models.Model):
class TextFieldModel(models.Model):
field = models.TextField()
+
+
+class ArrayFieldSubclass(ArrayField):
+ def __init__(self, *args, **kwargs):
+ super(ArrayFieldSubclass, self).__init__(models.IntegerField())
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index 10917153df..5513fb34aa 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -10,7 +10,7 @@ from django import forms
from django.test import TestCase, override_settings
from django.utils import timezone
-from .models import IntegerArrayModel, NullableIntegerArrayModel, CharArrayModel, DateTimeArrayModel, NestedIntegerArrayModel
+from .models import IntegerArrayModel, NullableIntegerArrayModel, CharArrayModel, DateTimeArrayModel, NestedIntegerArrayModel, ArrayFieldSubclass
@unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL required')
@@ -228,6 +228,15 @@ class TestMigrations(TestCase):
new = ArrayField(*args, **kwargs)
self.assertEqual(new.base_field.max_length, field.base_field.max_length)
+ def test_subclass_deconstruct(self):
+ field = ArrayField(models.IntegerField())
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, 'django.contrib.postgres.fields.ArrayField')
+
+ field = ArrayFieldSubclass()
+ name, path, args, kwargs = field.deconstruct()
+ self.assertEqual(path, 'postgres_tests.models.ArrayFieldSubclass')
+
@override_settings(MIGRATION_MODULES={
"postgres_tests": "postgres_tests.array_default_migrations",
})