From 3d0a0ecd2cc5d7bfe0b53c33255c1b6564c160a4 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Sun, 11 Jun 2017 15:52:19 -0400 Subject: [PATCH] Refs #23919 -- Removed support for broken Model.__str__() in Model.__repr__(). Returning invalid bytestrings in __str__() is unlikely in Python 3. --- django/db/models/base.py | 6 +----- tests/model_regress/models.py | 8 -------- tests/model_regress/tests.py | 9 ++------- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/django/db/models/base.py b/django/db/models/base.py index 949b1697fc..ccc838350b 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -498,11 +498,7 @@ class Model(metaclass=ModelBase): return new def __repr__(self): - try: - u = str(self) - except (UnicodeEncodeError, UnicodeDecodeError): - u = '[Bad Unicode data]' - return '<%s: %s>' % (self.__class__.__name__, u) + return '<%s: %s>' % (self.__class__.__name__, self) def __str__(self): return '%s object (%s)' % (self.__class__.__name__, self.pk) diff --git a/tests/model_regress/models.py b/tests/model_regress/models.py index 7af20e44d3..b9db796dcb 100644 --- a/tests/model_regress/models.py +++ b/tests/model_regress/models.py @@ -52,14 +52,6 @@ class Worker(models.Model): return self.name -class BrokenStrMethod(models.Model): - name = models.CharField(max_length=7) - - def __str__(self): - # Intentionally broken (invalid start byte in byte string). - return b'Name\xff: %s'.decode() % self.name - - class NonAutoPK(models.Model): name = models.CharField(max_length=10, primary_key=True) diff --git a/tests/model_regress/tests.py b/tests/model_regress/tests.py index 1988a3fd09..cb0b530063 100644 --- a/tests/model_regress/tests.py +++ b/tests/model_regress/tests.py @@ -8,8 +8,8 @@ from django.test import TestCase, skipUnlessDBFeature from django.utils.timezone import get_fixed_timezone from .models import ( - Article, BrokenStrMethod, Department, Event, Model1, Model2, Model3, - NonAutoPK, Party, Worker, + Article, Department, Event, Model1, Model2, Model3, NonAutoPK, Party, + Worker, ) @@ -186,11 +186,6 @@ class ModelTests(TestCase): w = Worker.objects.create(department=d, name="Full-time") self.assertEqual(str(w), "Full-time") - def test_broken_unicode(self): - # Models with broken __str__() methods have a printable repr(). - b = BrokenStrMethod.objects.create(name='Jerry') - self.assertEqual(repr(b), '') - @skipUnlessDBFeature("supports_timezones") def test_timezones(self): # Saving an updating with timezone-aware datetime Python objects.