Django:更新用户信息失败

Django: Updating user information failed

我正在尝试编写一个表单,如果用户已经登录系统,则可以通过该表单编辑自己的用户信息。

代码如下:

forms.py:

class UpdateUserForm(forms.ModelForm):
    username = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)

    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name')

views.py:

@login_required
def update_user(request):

    if request.method == "POST":
        update_user_from = UpdateUserForm(data=request.POST, instance=request.user)

        if update_user_from.is_valid():
            update_user_from.save()
        else:
            print(update_user_from.errors)
    else:
        update_user_from = UpdateUserForm()
        print("elseelse!")

    return render(request,
            'userprofile/update_user.html',
            {'update_user_from': update_user_from}
            )

update_user.html:

       ...
            <h1> Updating User informations of {{ user.username }}</h1>
            <form id="update_user_from" method="POST" action="/userprofile/update_user/">
                {% csrf_token %}
                {{ update_user_form.as_p }}
                <input type="SUBMIT" name="submit" value="Update"/>
            </form>

这些代码无法正常工作:它总是在 "Updating User informations of ...(a user name)" 之后直接显示一个 "update" 按钮,而我放在 views.py 中的 print("elseelse!") 总是被调用,这意味着 views.py 中的条件 if request.method == "POST" 不满足。但是不知道为什么。

打错了。您将 python 代码中的 update_user_from 与模板中的 update_user_form 变量混合使用。注意 _from_form 部分。

另请注意,在 GET 分支中,如果 if 语句,您应该将 instance 参数传递给表单构造函数:

update_user_form = UpdateUserForm(instance=request.user)