Fixed #18063 -- Avoid unicode in Model.__repr__ in python 2

Thanks guettli and mrmachine.
This commit is contained in:
Simon Meers 2012-08-20 16:47:30 +10:00
parent 30bdf22bc7
commit 3fce0d2a91
2 changed files with 12 additions and 0 deletions

View File

@ -404,6 +404,8 @@ class Model(six.with_metaclass(ModelBase, object)):
u = six.text_type(self) u = six.text_type(self)
except (UnicodeEncodeError, UnicodeDecodeError): except (UnicodeEncodeError, UnicodeDecodeError):
u = '[Bad Unicode data]' u = '[Bad Unicode data]'
if not six.PY3:
u = u.encode('ascii', 'replace')
return smart_str('<%s: %s>' % (self.__class__.__name__, u)) return smart_str('<%s: %s>' % (self.__class__.__name__, u))
def __str__(self): def __str__(self):

View File

@ -1,3 +1,5 @@
# coding: utf-8
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
import datetime import datetime
@ -146,6 +148,14 @@ class ModelTests(TestCase):
b = BrokenUnicodeMethod.objects.create(name="Jerry") b = BrokenUnicodeMethod.objects.create(name="Jerry")
self.assertEqual(repr(b), "<BrokenUnicodeMethod: [Bad Unicode data]>") 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") @skipUnlessDBFeature("supports_timezones")
def test_timezones(self): def test_timezones(self):
# Saving an updating with timezone-aware datetime Python objects. # Saving an updating with timezone-aware datetime Python objects.