2017-08-27 1 views
0

Vielleicht ist es ein Problem der schlechten Serialisierung von meiner Seite, aber ich habe Probleme, meine Daten deserialisieren:Deserialize Query-String QueryDict (von AJAX gesendet)

Ich bin eine Modelform über AJAX Senden (per Post) zu eine Sicht. Es gibt keinen Fehler, aber das gespeicherte ModelForm erstellt ein leeres Element in meinem Modell.

ich den Debugger für request.POST überprüft haben: Es ist der Schlüssel zu entsprechenden was von AJAX gesendet wurde, aber es ist kein QueryDict aber ein String der Form:

request.POST['keyinrequestpost'] = 'csrfmiddlewaretoken=pA.....zutQ&FirstField=BlaBlad&SecondField=BlaBla&ThirdField=BlaBla'

Offenbar tut dann:

MyModelForm(request.POST['keyinrequestpost'])

funktioniert nicht (das erstellte Element bekam nur leeres Feld), da es kein QueryDict ist? Ich dachte, die Konvertierung war automatisch ??

Wie kann ich dies deserialisieren, um ein von MyModelForm() verwendbares QueryDict zu erhalten?

meine AJAX:

$(document).ready(function(){ 
$('#newword_form').bind('submit', function(e){ 
    var newword_form = $('#newword_form') 
    newword_form_serialized = newword_form.serialize(); 
    $.ajax({url: '/create_newword/', 
      type: 'POST', 
      dataType: 'json', 
      data:{csrfmiddlewaretoken: '{{ csrf_token }}', 
       'newword': newword_form_serialized } , 
      success: function(data){ 
      ... 

und meine Ansicht:

if 'newword' in request.POST.keys(): # the form has been posted 
     f = MyModelForm(request.POST['newword']) 
     if f.is_valid(): 
      word = f.save() 
      return render(request, ... 

Antwort

0

Sie brauchen nicht die csrf_token auf diese Weise zu senden. Wenn es in deiner Form ist; das ist, wo es sein sollte, dann können Sie einfach das Formular serialisieren und es in Daten senden.

Nach Serialisierung, die CSRF-Token und alle Formulardaten werden in einem Wörterbuch und an den Server gesendet werden, enthalten. Sie können dann einfach auf Ihre Ansichten zugreifen.

Try this (JavaScript):

//var url = your url; 
$.ajax({ 
     url : url, 
     type : 'POST', 
     dataType: 'json', 
     data: $('form#newword_form').serialize(), 
     success : function(data, status, xhr){ 
      //success 
     }, 
     error : function(data , status , xhr){ 
      //error 
     } 
}); 

Dann in Sie views.py:

f = MyModelForm(request.POST) 

wird gut funktionieren.

Sag mir, wenn nicht.

Zusätzliche Hinweise: Ich hoffe, dass Ihre HTML etwas wie folgt aussieht:

<form method="post"> 
     {% csrf_token %} 
     <h4>Form Title</h4> 
     {{ form.as_p }} 
     <button type="submit">Submit</button> 
</form> 

Hoffnung, das hilft. Vielen Dank.

+0

wunderbare Antwort! Vielen Dank für Ihre Zeit. Und der 'Fehler' Teil in Ajax half mir sehr bei weiteren Problemen. – ThePhi

Verwandte Themen