2016-03-19 6 views
1

私は、ユーザーが「プロフィールの更新」をクリックして名、姓、ユーザー名などを編集できる機能を構築しました。それはうまく動作します。しかし、空白のフィールドではなく、以前に入力したデータで更新フォームを埋めたいと思っています。ユーザーが自分の情報を更新したいときにフォームにデータを取り込む方法は? django

これは私のフォームです:

class UpdateProfileForm(forms.ModelForm): 
    username = forms.CharField(required=True) 
    email = forms.EmailField(required=True) 
    first_name = forms.CharField(required=False) 
    last_name = forms.CharField(required=False) 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'first_name', 'last_name') 

    def clean_email(self): 
     username = self.cleaned_data.get('username') 
     email = self.cleaned_data.get('email') 

     if email and User.objects.filter(email=email).exclude(username=username).count(): 
      raise forms.ValidationError('This email address is already in use. Please supply a different email address.') 
     return email 

    def save(self, commit=True): 
     user = super(UpdateProfileForm, self).save(commit=False) 
     user.email = self.cleaned_data['email'] 

     if commit: 
      user.save() 

     return user 

そして、これはビューです:

def updateprofile(request): 
    args = {} 

    if request.method == 'POST': 
     update_profile_form = UpdateProfileForm(request.POST, instance=request.user) 

     if update_profile_form.is_valid(): 
      update_profile_form.save() 
      return HttpResponseRedirect(reverse('index')) 
    else: 
     update_profile_form = UpdateProfileForm() 

    args['update_profile_form'] = update_profile_form 
    return render(request, 'updateprofile.html', args) 

彼らは空白のフィールドに更新情報を入力した場合、彼らはそれらのすべてを入力する必要があると思いますので、これも重要です彼らが満たされたら、彼らは彼らが望むものを編集して提出することができます。ありがとうございました。

答えて

2

2番目のUpdateProfileForm()コールでインスタンスパラメータを忘れました。それは:

else: 
    update_profile_form = UpdateProfileFrom(instance=request.user)