Django:更新用户信息失败

时间:2015-03-23 03:19:51

标签: python django django-forms

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

以下是代码:

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>

这些代码无法正常运行:它始终显示&#34;更新&#34; &#34;更新...(用户名)&#34;的用户信息之后的按钮,以及我在print("elseelse!")中放置的views.py始终被调用,这意味着条件{ if request.method == "POST"中的{1}}不满意。但我不知道为什么。

1 个答案:

答案 0 :(得分:2)

有错误的类型。您将python代码中的update_user_from与模板中的update_user_form变量混合。请注意_from_form部分。

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

update_user_form = UpdateUserForm(instance=request.user)