python - 当前用户的 Django 用户配置文件模型表单编辑
问题描述
我对此进行了很多搜索,并且提供的所有问题和答案都不清楚且不符合目的,也许我走错了路。我最近刚开始使用 Python 和 Django,所以对它知之甚少。我正在创建一个网站并使用 Django 完成了基本身份验证,甚至使用 social-django 添加了 facebook 身份验证。那部分一切正常。现在我将转向个人资料信息以及在您注册网站后如何更新它。
我在models.py中有以下UserProfile:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.TextField()
last_name = models.TextField()
email_address = models.EmailField()
phone_number = models.TextField()
在 forms.py 一个测试表单:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['first_name','last_name','email_address']
然后在views.py中我有一个功能:
def myprofile(request):
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
user_profile = UserProfile.objects.get(user=request.user)
if request.method == 'GET':
user_profile = UserProfile.objects.get(user=request.user)
form = UserProfileForm(instance=user_profile)
return render(request, 'pandp/myprofile.html',
{'user_profile' : user_profile, 'form' : form})
最后是 myprofile.html:
<div class="profile-details">
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Update">
</form>
</div>
我从一开始就一直在努力实际上只加载登录用户的 UserProfile,似乎我设法使用UserProfile.objects.get(user=request.user)和UserProfileForm(request.POST, instance=request.user )但不确定这是否是正确的方法。目前,我的代码在 html 表单输出中填充了 first_name、last_name 和电子邮件地址,但是当更新字段并单击“更新”按钮时,它会刷新但不会保存到数据库。
是 form.save() 不够还是我做错了什么?
如果您对更简单的方法提出建议,我会全力以赴。我也尝试过研究 UpdateView 方法,但我发现的所有示例总是有差距,我无法满足我的目的。在 ModelForm 上使用 UpdateView 有什么好处?
可能是冗长而冗长的问题,但希望您能解决问题,并希望这可以帮助其他有类似问题的人。
解决方案
def myprofile(request):
if request.method == 'POST':
user_profile = UserProfile.objects.get(user=request.user)
form = UserProfileForm(request.POST, instance=user_profile)
...
您需要获取 UserProfile 实例并将其传递给 UserProfileForm,就像评论中提到的@willem-van-onsem 一样。
推荐阅读
- .net - RestSharp 105.2.3 https://api.eu.apiconnect.ibmcloud.com “底层连接已关闭”
- javascript - 在 2 个 div 之间切换
- swift - 如何增加测验中问题的重复率?
- css - 在 Angular 中将一个组件绘制在另一个组件上
- c++ - C ++将相同的IP排序在一起,网络日志
- .htaccess - 我的 .htaccess 中的代码导致重定向过多
- html - 如何将图片放在我创建的栏中的文字前面
- menuitem - 添加新的 menuitem odoo 10 销售插件不起作用
- angular - TypeError:无法读取未定义的属性“toUpperCase”
- android - 递归是一种有效的方法吗?