python - 如何允许用户在 Django 中编辑他们的个人资料?
问题描述
我在 models.py 中有一个模型,如下所示:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.DO_NOTHING)
phone_number = models.CharField(max_length=50, default='')
Birthday = models.CharField(max_length=50, default='')
city = models.CharField(max_length=50, default='')
school = models.CharField(max_length=100, default='')
course = models.CharField(max_length=50, default='')
我想让我的用户进行编辑,所以我在我的views.py中做了一个这样的函数:
if request.method == 'POST':
profil = UserProfile.objects.get(user=request.user)
profil.phone_number = models.CharField(max_length=50, default='')
profil.Birthday = models.CharField(max_length=50, default='')
profil.city = models.CharField(max_length=50, default='')
profil.school = models.CharField(max_length=100, default='')
profil.course = models.CharField(max_length=50, default='')
profil.save()
return redirect('profile')
return render(request, 'edit_profile.html')
我的模板是:
<form action="." method="post">
{% csrf_token %}
Phone Number:
<input type="text" name="phone_number" value="{{ profil.phone_number }}" /><br />
Birthday:
<input type="text" name="Birthday" value="{{ profil.Birthday }}" /><br />
city:
<input type="text" name="city" value="{{ profil.city }}" /><br />
school:
<input type="text" name="school" value="{{ profil.school }}" /><br />
course:
<input type="text" name="course" value="{{ profil.course }}" /><br />
<input type="submit" value="Save Changes" name="save" />
<input type="reset" value="Cancel" name="cancel" />
<br/>
</form>
我不知道为什么,但在填写表格后,我收到一个错误,提示找不到页面。如果我检查现有的用户个人资料,则没有任何更新。请帮忙。
解决方案
你有一个错误
profil = UserProfile.objects.get(user=request.user)
profil.phone_number = models.CharField(max_length=50, default='')
你得到一个UserProfile
对象,然后尝试保存一个对象str
而不是保存。用来实现你所需要的。phone_number
models.CharField
ModelForm
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = '__all__'
那么在您看来,您可以使用:
userprofile_form = UserProfileForm(request.POST if request.POST else None, instance = UserProfile.objects.get(user=request.user))
if request.method == 'POST':
if form.is_valid():
form.save()
return redirect('profile')
return render(request, 'edit_profile.html', context={'userprofile_form': userprofile_form)
并在 html 中使用:
<form action="." method="post">
{% csrf_token %}
Phone Number: {{ userprofile_form.phone_number }}
Birthday: {{ userprofile_form.Birthday }}
city: {{ userprofile_form.city }}
school: {{ userprofile_form.school }}
course: {{ userprofile_form.course }}
<input type="submit" value="Save Changes" name="save" />
<input type="reset" value="Cancel" name="cancel" />
<br/>
</form>
要不就
<form action="." method="post">
{% csrf_token %}
{{ userprofile_form }}
<input type="submit" value="Save Changes" name="save" />
<input type="reset" value="Cancel" name="cancel" />
<br/>
</form>
如果您想使用上传文件,请不要忘记将您的文件放入您可以做到的表格
UserProfileForm(request.POST, request.FILES, instance = UserProfile.objects.get(user=request.user))
中,您需要在 html 中放入<form enctype="multipart/form-data" method="post" action="...">
推荐阅读
- python - 为什么使用 Series 设置 MultiIndex 数据框会给出一列 NaN?
- tfs - 如何在扩展的对话框中显示 TFS 工作项?
- javascript - 将 JSON.parse 与 Node.js 一起使用时获得更详细的错误消息
- javascript - Chrome 扩展程序在选项卡中接收消息。chrome.tabs.sendMessage
- php - 限制评论 wordpress
- php - 内连接-Laravel
- java - 无法在Java中连接两个句子
- r - 如何在 R 中列出多个计算的结果
- loops - Pascal 中的“for i:=0 to i”循环 - 为什么它会起作用?
- web-scraping - 通过鼠标悬停抓取java。抓取后不显示动态数据