Просмотр исходного кода

Fixed #5931 -- Added __repr__ to db fields. Thanks, Thomas Güttler, emulbreh and magopian.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16145 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Jannis Leidel 14 лет назад
Родитель
Сommit
48cffd9e45
2 измененных файлов с 19 добавлено и 0 удалено
  1. 10 0
      django/db/models/fields/__init__.py
  2. 9 0
      tests/regressiontests/model_fields/tests.py

+ 10 - 0
django/db/models/fields/__init__.py

@@ -444,6 +444,16 @@ class Field(object):
         "Returns the value of this field in the given model instance."
         return getattr(obj, self.attname)
 
+    def __repr__(self):
+        """
+        Displays the module, class and name of the field.
+        """
+        path = '%s.%s' % (self.__class__.__module__, self.__class__.__name__)
+        name = getattr(self, 'name', None)
+        if name is not None:
+            return '<%s: %s>' % (path, name)
+        return '<%s>' % path
+
 class AutoField(Field):
     description = _("Integer")
 

+ 9 - 0
tests/regressiontests/model_fields/tests.py

@@ -48,6 +48,15 @@ class BasicFieldTests(test.TestCase):
         except ValidationError, e:
             self.fail("NullBooleanField failed validation with value of None: %s" % e.messages)
 
+    def test_field_repr(self):
+        """
+        Regression test for #5931: __repr__ of a field also displays its name
+        """
+        f = Foo._meta.get_field('a')
+        self.assertEqual(repr(f), '<django.db.models.fields.CharField: a>')
+        f = models.fields.CharField()
+        self.assertEqual(repr(f), '<django.db.models.fields.CharField>')
+
 class DecimalFieldTests(test.TestCase):
     def test_to_python(self):
         f = models.DecimalField(max_digits=4, decimal_places=2)