Wenn ich ein Formular über ein Ajax FormData
Objekt an meine Django-Back-End senden, scheint meine request.POST
ein Wörterbuch, dessen Werte Listen, keine Zeichenfolgen sind. Das heißt, ich erwarte, dass diese:Warum wird mein FormData-Objekt in ein Django-Listenwörterbuch eingefügt?
In [1]: request.POST
Out[1]: {'somekey': 'somevalue', ...}
Stattdessen ich diese bekommen:
In [2]: request.POST
Out[2]: {'somekey': ['somevalue'], ...}
Hier ist, wie ich einreichen:
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);
Offensichtlich konnte ich Schleife durch meine request.POST Wörterbuch und drehen Sie diese Listen in Strings vor dem Versuch, ein Django Form
Objekt mit den Daten zu instanziieren (für die Validierung), aber ich habe das Gefühl, dass etwas nicht stimmt. Warum wird mein FormData
Objekt in ein Wörterbuch von Listen umgewandelt (was natürlich nicht so verwendet werden kann, um einen gültigen Django Form
zu erstellen)?
Bitte, Rollback meine Kommentare, wenn Sie nicht einverstanden sind. Grüße. – danihp
@danihp Bearbeiten sieht gut aus, ich aktualisiert leicht – Alasdair
Wow, du hast Recht. Das Formular wird mit einem QueryDict-Objekt instanziiert, aber nicht mit einem gewöhnlichen Wörterbuch mit Listen (nur ein Wörterbuch mit einzelnen Werten). Ich habe gerade etwas gelernt! Vielen Dank! – Escher