在the docs中,有一个关于to_python
方法的段落,负责反序列化值。但是,建议的方法是如何序列化数据并使其准备好传递给窗口小部件?类似于get_db_prep_value()
,但是对于字段?
答案 0 :(得分:13)
有方法value()
和prepare_value()
,后者未记录,但在value()
结束时调用。如果您阅读the code,则可以搜索prepare_value
,然后会发现value()
如果需要,与日期相关的字段可以使用它来调整值。
as_widget()
调用 value()
,最后调用窗口小部件上的render()
方法并传递prepare_value()
返回的值(因此list
)沿着。
最新修改在小部件的render()
方法中进行。 仅在此处发生转换为最终字符串表示形式,这就是为什么在某些用例中(当小部件需要另一种数据类型而不是字符串时,例如选择需要render()
对象的列表)有必要特别重写render()
。
但是,如果窗口小部件处理字符串(或者您希望进行的修改可以应用于将传递给prepare_value()
的数据类型),则只需挂钩from django import forms
class MyField(forms.Field):
def prepare_value(self, value):
return '{}, I am modified!'.format(value)
class MyForm(forms.Form):
foo = MyField(initial="Hello world")
即可。
In [1]: MyForm().as_p()
Out[1]: '<p><label for="id_foo">Foo:</label> <input id="id_foo" name="foo" type="text" value="Hello world, I am modified!" /></p>'
测试shell中的代码段:
GetEnumerator()