【问题标题】:Reset form Django with instance使用实例重置表单 Django
【发布时间】:2017-05-04 15:26:34
【问题描述】:

我创建页面来更新用户身份验证用户名。但是在前端,如果存在用户名 django 则显示错误(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() 重置表单,因为它是用户编辑页面。我需要带有实际信息的“重置”表单。

截图

【问题讨论】:

    标签: django forms model instance reset


    【解决方案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})
    

    【讨论】:

    • 这行得通!关于渲染,做同样的事情,但你的例子是一个捷径。再次感谢哈哈
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多