我对此进行了很多搜索,提供的所有问题和答案从来都不是很明确且不适合目的,也许我是用错误的方式来做。 我最近刚开始使用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和电子邮件地址,但是当更新字段并单击“ Update”按钮时,它会刷新,但不会保存到数据库中。
form.save()是否不够,或者我做错了什么?
如果您有关于更简单方法的建议,那么我非常欢迎。 我也尝试过研究UpdateView方法,但同样,我发现的所有示例始终存在差距,因此无法满足我的目的。在ModelForm上使用UpdateView有什么好处?
也许是一个漫长而棘手的问题,但是希望您能解决这个问题,并希望这可以帮助其他有类似问题的人。