Django: Как я могу показать список значений в поле ввода текста? - PullRequest
0 голосов
/ 06 февраля 2011

Я определил модель с ManyToManyField, и я хочу, чтобы поле показывало значения, объединенные пробелами, например:

<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 голосов
/ 07 февраля 2011

Хорошо, я наконец понял:

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()
        }
0 голосов
/ 06 февраля 2011

У вас есть основное недоразумение, заключающееся в том, что сами поля не несут ответственности за то, как они отображаются. Это то, что виджеты делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...