2017-05-04 92 views
0

我創建頁面以更新用戶auth用戶名。但在前端,如果存在username django show 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()重置表單,因爲是用戶編輯頁面。我需要用實際信息「重置」表格。

截圖 enter image description here

回答

1

如果從數據庫中獲取用戶並用其作爲形式的實例,然後request.user應該不會改變。

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

This Works!關於渲染,做同樣的事情,但你的例子是一個快捷方式。再次感謝哈哈 –