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)
我正在尝试编写一个表单,如果用户已经登录系统,则可以通过该表单编辑自己的用户信息。
代码如下:
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)