当前用户的 Django 用户配置文件模型表单编辑
Django User profile model form edit for current user
我对此进行了很多搜索,但提供的所有问题和答案从来都不是很清楚,也不符合目的,也许我的处理方式不对。
我最近才开始使用 Python 和 Django,所以对它知之甚少。
我正在创建一个网站并使用 Django 完成了基本身份验证,甚至使用 social-django 添加了 facebook 身份验证。那部分一切正常。
现在我要转到个人资料信息以及如何在您注册网站后更新它。
我在 models.py 中有以下用户配置文件:
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.objects.get(user=request.user) 和 UserProfileForm(request.POST, instance=request.user) 但不确定这样做是否正确。
目前我的代码在 html 表单输出中填充 first_name、last_name 和电子邮件地址,但是当更新字段并单击 'Update' 按钮时,它会刷新但不会刷新保存到数据库。
是 form.save() 不够还是我做错了什么?
如果您有更简单的方法建议,我会洗耳恭听。
我也试过研究 UpdateView 方法,但我发现的所有示例总是有差距,我无法满足我的目的。使用 UpdateView 而不是 ModelForm 有什么好处?
也许是冗长而冗长的问题,但希望您能解决问题,并希望这可以帮助其他有类似问题的人。
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 一样。
我对此进行了很多搜索,但提供的所有问题和答案从来都不是很清楚,也不符合目的,也许我的处理方式不对。 我最近才开始使用 Python 和 Django,所以对它知之甚少。 我正在创建一个网站并使用 Django 完成了基本身份验证,甚至使用 social-django 添加了 facebook 身份验证。那部分一切正常。 现在我要转到个人资料信息以及如何在您注册网站后更新它。
我在 models.py 中有以下用户配置文件:
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.objects.get(user=request.user) 和 UserProfileForm(request.POST, instance=request.user) 但不确定这样做是否正确。 目前我的代码在 html 表单输出中填充 first_name、last_name 和电子邮件地址,但是当更新字段并单击 'Update' 按钮时,它会刷新但不会刷新保存到数据库。
是 form.save() 不够还是我做错了什么?
如果您有更简单的方法建议,我会洗耳恭听。 我也试过研究 UpdateView 方法,但我发现的所有示例总是有差距,我无法满足我的目的。使用 UpdateView 而不是 ModelForm 有什么好处?
也许是冗长而冗长的问题,但希望您能解决问题,并希望这可以帮助其他有类似问题的人。
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 一样。