summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/base.py2
-rw-r--r--tests/regressiontests/model_regress/tests.py10
2 files changed, 12 insertions, 0 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index fd7250cdb0..d7a9932388 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -404,6 +404,8 @@ class Model(six.with_metaclass(ModelBase, object)):
u = six.text_type(self)
except (UnicodeEncodeError, UnicodeDecodeError):
u = '[Bad Unicode data]'
+ if not six.PY3:
+ u = u.encode('ascii', 'replace')
return smart_str('<%s: %s>' % (self.__class__.__name__, u))
def __str__(self):
diff --git a/tests/regressiontests/model_regress/tests.py b/tests/regressiontests/model_regress/tests.py
index 6a45a83052..6a03b861e4 100644
--- a/tests/regressiontests/model_regress/tests.py
+++ b/tests/regressiontests/model_regress/tests.py
@@ -1,3 +1,5 @@
+# coding: utf-8
+
from __future__ import absolute_import, unicode_literals
import datetime
@@ -146,6 +148,14 @@ class ModelTests(TestCase):
b = BrokenUnicodeMethod.objects.create(name="Jerry")
self.assertEqual(repr(b), "<BrokenUnicodeMethod: [Bad Unicode data]>")
+ def test_no_unicode_in_repr(self):
+ a = Article.objects.create(
+ headline="Watch for umlauts: üöä", pub_date=datetime.datetime.now())
+ if six.PY3:
+ self.assertEqual(repr(a), '<Article: Watch for umlauts: üöä>')
+ else:
+ self.assertEqual(repr(a), '<Article: Watch for umlauts: ???>')
+
@skipUnlessDBFeature("supports_timezones")
def test_timezones(self):
# Saving an updating with timezone-aware datetime Python objects.