2016-05-15 39 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

相关问题