用实例重置表单Django

时间:2017-05-04 15:26:34

标签: django forms model instance reset

我创建页面以更新用户auth用户名。但在前端,如果存在用户名django显示错误(确定)但更改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()重置表单,因为是用户编辑页面。我需要用实际信息“重置”表格。

截图 enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

顺便说一下,通常建议在成功发布请求后重定向(即使您重定向到同一个网址)。您还可以使用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})