我正在尝试编写一个表单,用户可以通过该表单编辑自己的用户信息(如果他已经登录到系统中)。
以下是代码:
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}}不满意。但我不知道为什么。
答案 0 :(得分:2)
有错误的类型。您将python代码中的update_user_from
与模板中的update_user_form
变量混合。请注意_from
和_form
部分。
另请注意,在GET
分支中,如果if
语句应将instance
参数传递给表单构造函数:
update_user_form = UpdateUserForm(instance=request.user)