Когда я отправляю форму через объект ajax FormData
в мой Django-back-end, мой request.POST
кажется словарем, значения которого являются списками, а не строками. То есть, я надеюсь, это:Почему мой объект FormData POSTing в словаре django списков?
In [1]: request.POST
Out[1]: {'somekey': 'somevalue', ...}
Вместо этого, я получаю это:
In [2]: request.POST
Out[2]: {'somekey': ['somevalue'], ...}
Вот как я представляю:
var form = document.forms["my-form"]
//note, all of #my-form's inputs are type="hidden" if it makes a difference...
var fd = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open('POST', '/my-view/', true);
xhr.onload = function(){
if(xhr.status == 200){
//doStuff();...
}
}
xhr.setRequestHeader("X-CSRFToken", csrftoken);
xhr.send(fd);
Очевидно, что я мог бы перебрать мой request.POST словарь и превратить эти списки в строки, прежде чем пытаться создать объект django Form
с данными (для целей проверки), но я чувствую, что что-то не так. Почему мой объект FormData
превращается в словарь списков (который, очевидно, не может использоваться как - для создания действительного django Form
)?
, пожалуйста, откат моих комментариев, если вы не согласны. С уважением. – danihp
@ danihp edit выглядит хорошо, я немного обновил – Alasdair
Вау, ты прав. Форма будет создавать экземпляр с объектом QueryDict, но не с обычным словарем со списками (только словарь с одиночными значениями). Я только что узнал! Благодаря! – Escher