2017-12-16 10 views
0

사용자가 프로필 정보를 편집 할 수있는 수정 사용자 프로필 기능을 만들려고합니다. 양식에서 submit을 클릭하면 albums/profile/edit에 keyerror password로 표시됩니다.django Keyerror password

Error Screen Shot

Views.py :

from django.views import generic 
from django.views.generic.edit import CreateView, UpdateView, DeleteView 
from django.core.urlresolvers import reverse_lazy 
from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate, login 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import PasswordChangeForm 
from django.views.generic import View 
from albums.models import Album, Song 

from .forms import Userforms, EditProfileForm 

class Profile_edit(View): 
    form_class = EditProfileForm 
    template_name = 'accounts/edit_profile.html' 

    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

    def post(self, request): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 
      form.save() 
      return redirect('profile') 
     return render(request, self.template_name, {'form':form}) 

forms.py :

from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserChangeForm 
from django import forms 

class EditProfileForm(UserChangeForm): 

    class Meta: 
     model = User 
     fields = {'email', 'first_name', 'last_name', 'password'} 

urls.py

url(r'^profile/edit/$', views.Profile_edit.as_view(), name='Profile_edit'), 

edit_profile.html :

{% extends 'albums/base.html' %} 

{% block title %}Sign Up{% endblock %} 

{% block albums_active %}active{% endblock %} 

{% block body %} 

<div class="container-fluid"> 

<div class="row"> 

<div class="col-sm-12 col-md-7"> 

<div class="panel panel-default"> 

<div class="panel-body"> 

{% extends 'albums/base.html' %} 

{% block title %}Sign Up{% endblock %} 

{% block albums_active %}active{% endblock %} 

{% block body %} 

<form class="form-horizontal" action="" method="post" enctype="multipart/form-data"> 

    {% csrf_token %} 

    {% include 'albums/form-template.html' %} 

<button type="submit" class="btn btn-success">Submit</button> 

</form> 

{% endblock %} 
+0

"암호"는 장고의 양식 인프라에서 예약 된 키워드 일 수 있습니까? 'views.py'가 어디에서 잘못 될지 알 수 있도록 더 많은 추적 목록을 게시 할 수 있습니까? 스크린 샷에 표시된 예외 위치는별로 도움이되지 않습니다. –

+0

'fields = { 'email', 'first_name', 'last_name', 'password'}'이것을 중괄호로 묶어 세트로 만드는 것은 이상한 것 같습니다. 필자가 본 예제에서는 목록이나 튜플을 사용합니다. 어쩌면 그것이 문제일까요? –

답변

0

초기화 할 때 사용자 인스턴스를 양식에 전달해야합니다. 그렇지 않으면 양식이 어떤 사용자를 편집하고 있는지 알 수 없습니다.

def get(self, request): 
    form = self.form_class(instance=request.user) 

def post(self, request): 
    form = self.form_class(request.POST, instance=request.user) 
+0

정말 고마워요. 효과가있다. –