2016-05-15 9 views
0

Ich benutze Ajax Anrufe in meinem Programm. Ich erhalte Fehler wie:__init __() hat ein unerwartetes Schlüsselwort argument 'password' bekommen django

TypeError: __init__() got an unexpected keyword argument 'password' 

ich in Modell verfolgt haben:

class Student(models.Model): 
    name = models.CharField(max_length = 20) 
    password = models.CharField(max_length = 100) 
    email = models.CharField(max_length = 10) 


class StudentForm(forms.ModelForm): 
    class Meta: 
     model = Student 
     fields = '__all__ 

nun folgende ist meine Vorlage:

`<form id = "post_submit" action="{% url "apply" %}" method="POST"> 
     {% csrf_token %} 
     {% for field in form %} 
      <p>{{field.label}} : {{field}}</p> 
     {% endfor %} 

     <p><input type="submit" name="Submit"></p> 
    </form> 
    <p id="click_option">Click here.</p> 

Ajax Anrufe werden gemacht:

$.ajax({ 


// using this for csrf handling 




     // alert(" i am in ajax"); 
     // console.log(" iam "); 
     url : "/apply/", 
     type : "POST", 
     data : 
     { 
      csrfmiddlewaretoken:document.getElementsByName('csrfmiddlewaretoken')[0].value, 
      name : $('#id_name').val(), 
      email : $('#id_email').val(), 
      password : $('#id_password').val(), 
     }, 
     success: function(json) { 
      alert("Congratulations! You scored: " + json['status']); 

     }, 

     // error 




    }) 


}); 

Die Ansicht im Backend ist:
def gelten (Anfrage):

if request.method == 'POST': 
      name = request.POST.get('name') 
      email = request.POST.get('email') 
      password = request.POST.get('password') 

      student = StudentForm(name = name, email = email, password = password) 
      student.save() 

      data = {"status" : "success"} 
      return JsonResponse(data) 
     else: 
      data = {"status" : "failure"} 

      return JsonResponse(data) 
+0

Sie rufen den Konstruktor von StudentForm auf, der nicht definiert ist. Der richtige Weg kann sein, das Objekt zu erstellen und dann Werte zuzuweisen – Freddy

+0

ok, ich habe das Problem. Aber warum gibt es nur einen Typfehler für 'password'? Warum nicht für alle Werte? – learner

+0

Der 'TypeError' zeigt jeweils nur einen Feldnamen an. Wenn Sie es in 'student = StudentForm (name = name, email = email)' geändert haben, erhalten Sie denselben Fehler für eines der anderen Felder. – Alasdair

Antwort

2

Sie müssen die Werte aus den POST-Daten nicht per Hand holen, die Form, das für Sie übernimmt.

Nachdem Sie überprüft haben, ob das Formular gültig ist, können Sie save() aufrufen, um die Modellinstanz zu speichern.

form = StudentForm(request.POST) 
if form.is_valid() 
    student = form.save() 

Schließlich Ihr Student Modell eine password in einem CharField speichert. Es ist unsicher, Passwörter im Klartext zu speichern. Django's authentication system kümmert sich um Hash-Passwörter für Sie. Benutze es.

+1

upvoted für den Vorschlag über das Django-Authentifizierungssystem. Vielen Dank. – learner

Verwandte Themen