Если флажок снят, вы получите значение в Django - PullRequest
0 голосов
/ 12 июля 2011

Я задаю пользователям моего приложения Django много вопросов да / нет, и я бы хотел сделать это, используя вместо флажков переключатели.Проблема в том, что я хочу value для каждого флажка, вместо каждого, который отмечен.

Я нашел этот трюк, используя дополнительные hidden флажки , который выглядит как хорошийхак, но один из комментариев вызвал у меня некоторые сомнения:

Это не правильно.Оба значения будут отправлены, HTML допускает [несколько] значений с одним и тем же именем.

Это правда?Если да, то как Django HttpRequest.POST будет обрабатывать несколько значений для одного и того же имени / ключа?

1 Ответ

1 голос
/ 12 июля 2011

Поскольку HTML позволяет пользователям отправлять несколько значений для одного ключа, Django должен использовать специализированную структуру данных, чтобы учесть эту возможность.Результатом является MultiValueDict, который request.GET и request.POST являются примерами под капотом.Вы можете просмотреть код для этой структуры здесь: http://djangoapi.quamquam.org/trunk/django.utils.datastructures.MultiValueDict-class.html

Короткий рассказ, однако, заключается в том, что вы можете получить доступ к первому значению с помощью простого поиска в формате dict, например request.POST['mykey'], и списка всех значений, таких как request.POST.getlist('mykey').

Тем не менее, как отметили некоторые другие комментаторы, возможно, существует лучший способ обработки описанного вами варианта использования.Радиокнопки с опцией да / нет являются одним из решений, хотя, возможно, они менее удобны с точки зрения пользователя.Я думаю, что лучший способ справиться с этим - переосмыслить, как вы обрабатываете форму, и по возможности использовать библиотеку Django Forms вместо низкоуровневой обработки необработанных данных POST.

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