mirror of https://github.com/django/django.git
Fixed #27914 -- Added support for nested classes in Field.deconstruct()/__repr__().
This commit is contained in:
parent
9f4e0fde0a
commit
fb0f987f7d
|
@ -191,7 +191,7 @@ class Field(RegisterLookupMixin):
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""Display the module, class, and name of the field."""
|
"""Display the module, class, and name of the field."""
|
||||||
path = '%s.%s' % (self.__class__.__module__, self.__class__.__name__)
|
path = '%s.%s' % (self.__class__.__module__, self.__class__.__qualname__)
|
||||||
name = getattr(self, 'name', None)
|
name = getattr(self, 'name', None)
|
||||||
if name is not None:
|
if name is not None:
|
||||||
return '<%s: %s>' % (path, name)
|
return '<%s: %s>' % (path, name)
|
||||||
|
@ -448,7 +448,7 @@ class Field(RegisterLookupMixin):
|
||||||
if value is not default:
|
if value is not default:
|
||||||
keywords[name] = value
|
keywords[name] = value
|
||||||
# Work out path - we shorten it for known Django core fields
|
# Work out path - we shorten it for known Django core fields
|
||||||
path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__)
|
path = "%s.%s" % (self.__class__.__module__, self.__class__.__qualname__)
|
||||||
if path.startswith("django.db.models.fields.related"):
|
if path.startswith("django.db.models.fields.related"):
|
||||||
path = path.replace("django.db.models.fields.related", "django.db.models")
|
path = path.replace("django.db.models.fields.related", "django.db.models")
|
||||||
if path.startswith("django.db.models.fields.files"):
|
if path.startswith("django.db.models.fields.files"):
|
||||||
|
|
|
@ -9,6 +9,11 @@ from .models import (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Nested():
|
||||||
|
class Field(models.Field):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class BasicFieldTests(TestCase):
|
class BasicFieldTests(TestCase):
|
||||||
|
|
||||||
def test_show_hidden_initial(self):
|
def test_show_hidden_initial(self):
|
||||||
|
@ -33,6 +38,10 @@ class BasicFieldTests(TestCase):
|
||||||
f = models.fields.CharField()
|
f = models.fields.CharField()
|
||||||
self.assertEqual(repr(f), '<django.db.models.fields.CharField>')
|
self.assertEqual(repr(f), '<django.db.models.fields.CharField>')
|
||||||
|
|
||||||
|
def test_field_repr_nested(self):
|
||||||
|
"""__repr__() uses __qualname__ for nested class support."""
|
||||||
|
self.assertEqual(repr(Nested.Field()), '<model_fields.tests.Nested.Field>')
|
||||||
|
|
||||||
def test_field_name(self):
|
def test_field_name(self):
|
||||||
"""
|
"""
|
||||||
A defined field name (name="fieldname") is used instead of the model
|
A defined field name (name="fieldname") is used instead of the model
|
||||||
|
@ -85,6 +94,11 @@ class BasicFieldTests(TestCase):
|
||||||
field._get_default
|
field._get_default
|
||||||
pickle.dumps(field)
|
pickle.dumps(field)
|
||||||
|
|
||||||
|
def test_deconstruct_nested_field(self):
|
||||||
|
"""deconstruct() uses __qualname__ for nested class support."""
|
||||||
|
name, path, args, kwargs = Nested.Field().deconstruct()
|
||||||
|
self.assertEqual(path, 'model_fields.tests.Nested.Field')
|
||||||
|
|
||||||
|
|
||||||
class ChoicesTests(SimpleTestCase):
|
class ChoicesTests(SimpleTestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue