用实例重置表单 Django

Reset form Django with instance

我创建页面来更新用户授权用户名。但在前端,如果存在用户名 django show erros (ok) 但更改 request.user 实例。所以我在菜单上的用户名也会更改和输入。我需要刷新页面才能恢复正常。

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() 重置表单,因为这是用户编辑页面。我需要包含实际信息的 "reset" 表格。

截图

如果您从数据库中获取用户并将其用作表单实例,则 request.user 不应更改。

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

顺便说一句,通常建议在成功的 post 请求后重定向(即使您重定向到相同的 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})