【发布时间】:2015-09-14 14:26:24
【问题描述】:
所以,我开设了与this answer 类似的课程。它看起来像:
class TruncatingCharField(models.CharField):
description = _("String (truncated to %(max_length)s)")
def get_prep_value(self, value):
value = super(TruncatingCharField, self).get_prep_value(value)
if value:
value = value[:self.max_length]
return value
我希望使用此字段实例化模型且字符串长度超过阈值应该会触发截断。然而,情况似乎并非如此:
class NewTruncatedField(models.Model):
trunc = TruncatingCharField(max_length=10)
class TestTruncation(TestCase):
def test_accepted_length(self):
trunc = 'a'*5
obj = NewTruncatedField(trunc=trunc)
self.assertEqual(len(obj.trunc), 5)
def test_truncated_length(self):
trunc = 'a'*15
obj = NewTruncatedField(trunc=trunc)
self.assertEqual(len(obj.trunc), 10)
第一个测试通过,正如预期的那样,但第二个失败,因为该字段没有截断它的值。 get_prep_value() 方法肯定被调用(通过断点测试),并且value 在返回点的输出被正确截断。
那么为什么obj 对象中的字段值没有被截断?
【问题讨论】:
标签: django django-models