2016-05-15 81 views
0

我在我的程序中使用ajax調用。我得到這樣的錯誤:__init __()得到了一個意想不到的關鍵字參數'password'django

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

我在模型如下:

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__ 

現在,下面是我的模板:

`<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調用使用由:

$.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 




    }) 


}); 

在後端的視圖是:
高清應用(要求):

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

您正在調用未定義的StudentForm構造函數。正確的方法可以是創建對象,然後分配值 – Freddy

+0

好吧,我得到了問題。但爲什麼只有'password'的類型錯誤?爲什麼不爲所有的價值? – learner

+0

「TypeError」一次只顯示一個字段名稱。如果將其更改爲'student = StudentForm(name = name,email = email)',那麼對於其他字段中的其中一個,您將得到相同的錯誤。 – Alasdair

回答

2

您不必手動取得值了POST數據,表單需要照顧的那個你。

檢查表格是否有效後,您可以撥打save()來保存模型實例。

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

最後,您Student模型在CharField存儲password。以純文本形式存儲密碼是不安全的。 Django's authentication system爲您處理哈希密碼。用它。

+1

upvoted關於Django的認證系統的建議。非常感謝你。 – learner

相關問題