Доступ к спискам в запросе Django.POST - PullRequest
0 голосов
/ 26 марта 2019

У меня проблемы с доступом ко всем данным, возвращаемым моими формами в моей функции post.Я заметил значительное расхождение между тем, что отображается при печати request.POST, и тем, когда мой код обращается к этим данным.Надеюсь, кто-нибудь сможет мне это объяснить.

Вывод print(request.POST):

print(request.POST)
<QueryDict: {'csrfmiddlewaretoken': ['AXMPO...'],
 'start_date': ['2019-03-01'], 'end_date': ['2019-03-26'], 
'reports': ['4', '1']}>

Для проверки данных, с которыми работает мой код, я использовал модуль json для просмотраданные.Поведение моего кода во время отладки соответствует этому представлению:

json.dumps(request.POST)
'{"csrfmiddlewaretoken": "AXMPO...",
 "start_date": "2019-03-01", "end_date": "2019-03-26",
 "reports": "1"}'

Все это выглядит примерно одинаково, пока вы не увидите значение "reports".Пользователь выбирает эти отчеты с помощью виджета MultipleSelect в моей форме, и мой код перебирает предоставленные номера идентификаторов.Однако независимо от того, сколько отчетов я выберу, я получу только один идентификатор.Если кто-то может объяснить, почему это происходит, я был бы искренне признателен.

1 Ответ

0 голосов
/ 26 марта 2019

Оказывается, это действительно старая школьная проблема.Хотелось бы, чтобы это было более заметным в документации.Ниже приводится объяснение Саймона Уилсона:

"" "

Это функция, а не ошибка. Если вы хотите получить список значений для ключа, используйте следующее:

values = request.POST.getlist('key')

Причина этого заключается в том, что метод API должен последовательно возвращать либо строку, либо список, но не оба одновременно. Обычный случай в веб-приложениях - это связывание ключа формы содно значение, поэтому синтаксис [] делает это. getlist () используется для случаев (например, для вас), когда вы собираетесь использовать ключ несколько раз для одного значения. "" "- Саймон Уилсон, 13 лет назад.

...