diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index d90f0cc225..9d0967fa2b 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -278,7 +278,7 @@ def typecast_string(s): """ Cast all returned strings to unicode strings. """ - if not s: + if not s and not isinstance(s, str): return s return smart_unicode(s) diff --git a/tests/regressiontests/model_regress/models.py b/tests/regressiontests/model_regress/models.py index 0fee831212..7aa9e2a7c4 100644 --- a/tests/regressiontests/model_regress/models.py +++ b/tests/regressiontests/model_regress/models.py @@ -10,6 +10,7 @@ class Article(models.Model): headline = models.CharField(max_length=100, default='Default headline') pub_date = models.DateTimeField() status = models.IntegerField(blank=True, null=True, choices=CHOICES) + misc_data = models.CharField(max_length=100, blank=True) class Meta: ordering = ('pub_date','headline') @@ -30,5 +31,10 @@ An empty choice field should return None for the display name. >>> a.save() >>> a.get_status_display() is None True + +Empty strings should be returned as Unicode +>>> a2 = Article.objects.get(pk=a.id) +>>> a2.misc_data +u'' """ }