gpt4 book ai didi

django - Django get_prep_value() 中的自定义字段无效

转载 作者:行者123 更新时间:2023-12-04 00:24:03 26 4
gpt4 key购买 nike

所以,我做了一个与 this answer 类似的类(class).看起来像:

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中字段的值?对象没有被截断?

最佳答案

我相信 get_prep_value()只影响保存到数据库的内容,而不影响 Python 对象的内部值。

尝试覆盖 to_python() 并将你的逻辑移到那里。

关于django - Django get_prep_value() 中的自定义字段无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com