diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py index c28e3d6ca3..ae07f1bc0c 100644 --- a/django/contrib/postgres/fields/array.py +++ b/django/contrib/postgres/fields/array.py @@ -96,14 +96,6 @@ class ArrayField(Field): value = [self.base_field.to_python(val) for val in vals] return value - def get_default(self): - """Overridden from the default to prevent string-mangling.""" - if self.has_default(): - if callable(self.default): - return self.default() - return self.default - return None - def value_to_string(self, obj): values = [] vals = self._get_val_from_obj(obj) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 2c3efbb689..3b42c998b7 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -722,7 +722,7 @@ class Field(RegisterLookupMixin): if self.has_default(): if callable(self.default): return self.default() - return force_text(self.default, strings_only=True) + return self.default if (not self.empty_strings_allowed or (self.null and not connection.features.interprets_empty_strings_as_nulls)): return None diff --git a/docs/releases/1.8.txt b/docs/releases/1.8.txt index a233edd443..6635d625bb 100644 --- a/docs/releases/1.8.txt +++ b/docs/releases/1.8.txt @@ -857,6 +857,11 @@ Miscellaneous :exc:`~django.test.client.RedirectCycleError` if it detects a loop or hits a maximum redirect limit (rather than passing silently). +* Translatable strings set as the ``default`` parameter of the field are cast + to concrete strings later, so the return type of ``Field.get_default()`` is + different in some cases. There is no change to default values which are the + result of a callable. + .. _deprecated-features-1.8: Features deprecated in 1.8