我已经使用ManyToManyField定义了一个Model,我希望该字段显示由空格连接的值,例如:
<input type="text" name="foo" value="val1 val2 val3"/>
我已经定义了使用CharField表示多个值的表单:
class MyForm(ModelForm):
foo = CharField(label='Foo')
class Meta:
model = MyModel
而不是显示由空格分隔的值,而是显示此值:
[u'val1', u'val2', u'val3']
如何覆盖此行为?
答案 0 :(得分:0)
你有一个基本的误解,即字段本身不对它们的呈现方式负责。这就是widgets所做的。
答案 1 :(得分:0)
好的,我终于明白了:
class MultiValueTextWidget(TextInput):
def _get_value(self, value):
return " ".join(value)
def _format_value(self, value):
if self.is_localized:
return formats.localize_input(self._get_value(value))
return self._get_value(value)
我之前尝试过(在我发布原始问题之前),但我认为我的字段声明有问题。当我使用小部件实例化字段时,它可以工作:
markets = CharField(widget=MultiValueTextWidget(), label='Ticker symbols')
出于某种原因,我遇到了麻烦:
class Meta:
widgets = {
'markets': MultiValueTextWidget()
}