From c72eb80d114fb5d90bd21b5549e8abd0bbd17f99 Mon Sep 17 00:00:00 2001 From: Carl Meyer Date: Thu, 11 Dec 2014 17:28:03 -0700 Subject: [PATCH] Fixed #23455 -- Accept either bytes or text for related_name, convert to text. --- django/db/models/fields/related.py | 4 ++-- docs/releases/1.7.2.txt | 6 +++--- tests/model_fields/models.py | 2 +- tests/model_fields/tests.py | 4 ++++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 8a6d87c5ac..a2f4b95286 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -14,7 +14,7 @@ from django.db.models.lookups import IsNull from django.db.models.related import RelatedObject, PathInfo from django.db.models.query import QuerySet from django.db.models.expressions import Col -from django.utils.encoding import smart_text +from django.utils.encoding import force_text, smart_text from django.utils import six from django.utils.translation import ugettext_lazy as _ from django.utils.functional import curry, cached_property @@ -280,7 +280,7 @@ class RelatedField(Field): sup.contribute_to_class(cls, name, virtual_only=virtual_only) if not cls._meta.abstract and self.rel.related_name: - related_name = self.rel.related_name % { + related_name = force_text(self.rel.related_name) % { 'class': cls.__name__.lower(), 'app_label': cls._meta.app_label.lower() } diff --git a/docs/releases/1.7.2.txt b/docs/releases/1.7.2.txt index 0f1483e18e..30e1c8fc49 100644 --- a/docs/releases/1.7.2.txt +++ b/docs/releases/1.7.2.txt @@ -125,6 +125,6 @@ Bugfixes * Fixed a crash in the admin when using "Save as new" and also deleting a related inline (:ticket:`23857`). -* Removed auto-conversion of ``related_name`` to unicode in field - deconstruction, to maintain consistency of bytes/text in migrations matching - the original values (:ticket:`23455` and :ticket:`23982`). +* Always converted ``related_name`` to text (unicode), since that is required + on Python 3 for interpolation. Removed conversion of ``related_name`` to text + in migration deconstruction (:ticket:`23455` and :ticket:`23982`). diff --git a/tests/model_fields/models.py b/tests/model_fields/models.py index ed1cfa8e8d..bb75208905 100644 --- a/tests/model_fields/models.py +++ b/tests/model_fields/models.py @@ -25,7 +25,7 @@ def get_foo(): class Bar(models.Model): b = models.CharField(max_length=10) - a = models.ForeignKey(Foo, default=get_foo) + a = models.ForeignKey(Foo, default=get_foo, related_name=b'bars') class Whiz(models.Model): diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index db04b7fcad..ddbf69419c 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -199,6 +199,10 @@ class ForeignKeyTests(test.TestCase): warnings = checks.run_checks() self.assertEqual(warnings, expected_warnings) + def test_related_name_converted_to_text(self): + rel_name = Bar._meta.get_field_by_name('a')[0].rel.related_name + self.assertIsInstance(rel_name, six.text_type) + class DateTimeFieldTests(unittest.TestCase): def test_datetimefield_to_python_usecs(self):