2015-06-20 45 views

回答

7

有方法value()prepare_value(),其中后者是无证的,但在value()的末尾被称为。如果您阅读the code,您可以搜索prepare_value,并会发现例如如果需要,与日期相关的字段利用它来调整值。

value()as_widget()这在端呼吁插件的render()方法,并传递沿着由value()(因而prepare_value())的返回值调用。

最新的修改是在小部件的render()方法中进行的。 只有在这里发生转变到最后的字符串表示,这就是为什么在某些使用情况(当插件需要比串另一种数据类型,例如选择列表,其需要一个list对象),有必要覆盖render() sepecifically。

但是,如果小部件处理字符串(或者您希望进行的修改可以应用于将传递到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>' 
相关问题