【发布时间】:2016-09-24 01:01:35
【问题描述】:
我的 Django/Python 开发之旅还处于起步阶段,经过几个小时/几天的摸索和试错后,我已经能够慢慢弄清楚大多数事情。我现在有一个无法正常工作的常见问题:
如何创建用户个人资料更新视图/表单?
我已经破解了 Stack Overflow 的几个解决方案,但到目前为止我无法弄清楚我做错了什么。这是我使用 Django 1.9 的糟糕尝试的初始版本:
#forms.py
class profileForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'email']
#views.py
@login_required
def profile(request):
if request.method == 'POST':
form = profileForm(data=request.POST, instance=request.user)
update = form.save(commit=False)
update.user = request.user
update.save()
else:
form = profileForm(instance=request.user)
return render(request, 'profile.html', {'form': form})
#urls.py
urlpatterns = [
url(r'^dashboard/$', views.dashboard, name='dashboard'),
url(r'^dashboard/profile$', views.profile, name='profile'),
]
#profile.html
<form action="." method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Update Profile</button>
</form>
因此,我的更新用户配置文件视图的当前行为是不更新 POST 表单中的任何指定字段,但页面确实加载到不同的 URL。例如,配置文件更新表单的 URL 是 /dashboard/profile,它会在提交表单时重定向到 /dashboard。如果我在 Django 管理员中手动添加 email/first_name/last_name,它会在我的表单中正确显示...我只是无法保存更新的数据。
我确实有一个版本的上述代码也给了我用户名错误,我猜这可能已经接近解决方案了?最终我想使用电子邮件地址作为用户名,但是一旦我有一个超简单的工作资料更新表格,我想自己弄清楚。
对于这个愚蠢的问题,我提前道歉,我已经在 Google 上搜索并尝试了其他解决方案,但我要么无法获得相同的初始错误,要么无法获得详细的工作版本。
谢谢大家,祝你白天/夜晚愉快!
编辑:
我也尝试过这个解决方案How to update User object without creating new one?,它也具有相同的行为:不更新 POST 表单中的任何指定字段,但页面确实加载到不同的 URL...这让我更加困惑,也许问题出在我的 urls.py 上?
【问题讨论】:
标签: python django django-forms django-views django-users