Django:如何在文本输入字段中显示值列表?

时间:2011-02-06 14:47:42

标签: python django forms

我已经使用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']

如何覆盖此行为?

2 个答案:

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