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

в порядке, я получил проблему. Но почему существует ошибка типа для пароля? Почему не для всех значений? – 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 модель хранения password в CharField. Небезопасно хранить пароли в текстовом виде. Django's authentication system заботится о хэшировании паролей для вас. Используй это.

+1

поддержал предложение о системе аутентификации django. Большое спасибо. – learner

Смежные вопросы