与自定义Django表单字段中的to_python相反?

时间:2015-06-20 13:40:03

标签: python django

the docs中,有一个关于to_python方法的段落,负责反序列化值。但是,建议的方法是如何序列化数据并使其准备好传递给窗口小部件?类似于get_db_prep_value(),但是对于字段?

1 个答案:

答案 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()