浏览代码

Fixed #24677 -- Made TextField.to_python() return a string.

This is consistent with CharField.
Rolo 9 年之前
父节点
当前提交
19e67c6cd1
共有 2 个文件被更改,包括 12 次插入2 次删除
  1. 5 2
      django/db/models/fields/__init__.py
  2. 7 0
      tests/model_fields/tests.py

+ 5 - 2
django/db/models/fields/__init__.py

@@ -2141,12 +2141,15 @@ class TextField(Field):
     def get_internal_type(self):
         return "TextField"
 
-    def get_prep_value(self, value):
-        value = super(TextField, self).get_prep_value(value)
+    def to_python(self, value):
         if isinstance(value, six.string_types) or value is None:
             return value
         return smart_text(value)
 
+    def get_prep_value(self, value):
+        value = super(TextField, self).get_prep_value(value)
+        return self.to_python(value)
+
     def formfield(self, **kwargs):
         # Passing max_length to forms.CharField means that the value's length
         # will be validated twice. This is considered acceptable since we want

+ 7 - 0
tests/model_fields/tests.py

@@ -246,6 +246,13 @@ class ManyToManyFieldTests(test.SimpleTestCase):
         )
 
 
+class TextFieldTests(test.TestCase):
+    def test_to_python(self):
+        """TextField.to_python() should return a string"""
+        f = models.TextField()
+        self.assertEqual(f.to_python(1), '1')
+
+
 class DateTimeFieldTests(test.TestCase):
     def test_datetimefield_to_python_usecs(self):
         """DateTimeField.to_python should support usecs"""