LINUX.ORG.RU

ManyToManyField из TextInput

 


0

1

Понадобилось сделать ввод M2M не через select multiple, а через текстовый input строкой ключей через запятую. Варианты есть разные, но для начала я просто поменял полю виджет на TextInput и был удивлен тем, что при передаче строки, содержащей единственный и валидный ключ без каких-либо лишних символов форма не проходит валидацию («Enter a list of values»). Отладчик браузера показывает совершенно такой же запрос, как и с дефолтным select multiple (...&person=<просто_число>&...). В чем может быть дело?

★★

Вообще говоря, интересно уже то, что конструктор формы умеет заполнять данными из модели TextInput вместо SelectMultiple. Заполняет он его списком через запятую в квадратных скобках (т. е. python array). Правда, обратно не принимает ни в таком виде, ни в идентичном ответу с SelectMultiple (этот самый пример с единственным ключом без лишних символов).

shatsky ★★
() автор топика
Ответ на: комментарий от zz

Звучит логично (как будто SelectMultiple отдает массив, а TextInput строку), но...
https://github.com/django/django/blob/master/django/forms/widgets.py#L570 - ничего подобного не видно;
http://stackoverflow.com/a/4708481/1620374 - и здесь в последнем абзаце утверждается, что поле о виджете ничего не знает.

shatsky ★★
() автор топика
Ответ на: комментарий от provaton

Да, при создании своего поля, наследующего от ModelMultipleChoiceField, с переопределенным clean - работает, спасибо.

shatsky ★★
() автор топика
Ответ на: комментарий от AlexKiriukha

Нет, queryset оно дальше делает само.

shatsky ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.