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), "") + 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), '') + else: + self.assertEqual(repr(a), '') + @skipUnlessDBFeature("supports_timezones") def test_timezones(self): # Saving an updating with timezone-aware datetime Python objects.