2017-05-04 1 views
0

사용자 인증 사용자 이름을 업데이트 할 페이지를 만듭니다. 하지만 프론트 엔드에서 username이 존재한다면 django는 erros (ok)를 표시하지만 request.user 인스턴스는 변경합니다. 메뉴에 대한 내 사용자 이름도 변경되어 입력됩니다. 정상으로 돌아가려면 새로 고침 페이지가 필요합니다. 사용자 편집 페이지이기 때문에인스턴스가있는 Django 재설정

form_profile = UserProfileForm(request.POST or None, instance = UserProfile.objects.get(user = request.user)) 
    form_user = UserForm(request.POST or None, instance = request.user) 
    if form_profile.is_valid() and form_user.is_valid(): 
     form_profile.save() 
     form_user.save() 

    template = loader.get_template('users/user_edit.html') 
    return HttpResponse(template.render({"form_profile":form_profile, "form_user": form_user}, request)) 

나는 form_profile = UserProfileForm()와 양식을 재설정 할 수 없습니다. 실제 정보가있는 "재설정"양식이 필요합니다. 당신은 DB에서 사용자를 가져오고 양식 인스턴스로, 다음 request.user이 변경되지 않도록 사용하는 경우

스크린 샷 enter image description here

답변

1

.

user = User.objects.get(id=request.user.id) 
form_user = UserForm(request.POST or None, instance=user) 

제쳐두고 성공적인 요청 이후에 리디렉션하는 것이 좋습니다 (동일한 URL로 리디렉션하더라도). 당신은 또한 당신의 코드를 단순화하기 위해 render 바로 가기를 사용할 수 있습니다

from django.shortcuts import render, redirect 

def my_view(request): 
    form_profile = UserProfileForm(request.POST or None, instance = UserProfile.objects.get(user = request.user)) 
    form_user = UserForm(request.POST or None, instance = request.user) 
    if form_profile.is_valid() and form_user.is_valid(): 
     form_profile.save() 
     form_user.save() 
     return redirect('/success-url/') 

    return render(request, 'users/user_edit.html', {"form_profile":form_profile, "form_user": form_user}) 
+0

이 작동! 렌더링에 대해서도 똑같은 작업을 수행하지만 예제는 바로 가기입니다. 다시 한 번 고마워. –

관련 문제