2
所以,我製作了類似this answer的類。它看起來像:Django中的自定義字段get_prep_value()沒有效果
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
對象中的字段值未被截斷?