#json #httprequest #python-3.7 #django-2.1
#json #httprequest #python-3.7 #django-2.1
Вопрос:
У меня возникли трудности с доступом ко всем данным, возвращаемым моими формами в моей 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"
значение. Пользователь выбирает эти отчеты с помощью виджета множественного выбора в моей форме, и мой код повторяет предоставленные идентификационные номера. Однако, независимо от того, сколько отчетов я выбираю, я получаю только один идентификатор. Если кто-нибудь может объяснить, почему это происходит, я был бы искренне признателен.
Ответ №1:
Оказывается, это действительно проблема старой школы. Я мог бы пожелать, чтобы это было более заметно в документации, хотя. Объяснение Саймона Уилсона приведено ниже:
«»»
Это особенность, а не ошибка. Если вам нужен список значений для ключа, используйте следующее:
values = request.POST.getlist('key')
Причиной этого является то, что метод API должен последовательно возвращать либо строку, либо список, но никогда оба. Обычным случаем в веб-приложениях является то, что ключ формы должен быть связан с одним значением, так что это то, что делает синтаксис []. getlist() существует для случаев (подобных вашему), когда вы собираетесь использовать ключ несколько раз для одного значения. «»» — Саймон Уилсон, 13 лет назад.