у вас есть ошибка
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="...">