Я много искал по этому вопросу, и все представленные вопросы и ответы никогда не бывают ясными и не соответствуют цели, возможно, я ошибаюсь. Я только недавно начал Python и Django, поэтому очень мало знаю об этом. Я создаю веб-сайт и выполнил аутентификацию basi c с использованием Django и даже добавил аутентификацию facebook с использованием social- django. Эта часть все работает отлично. Теперь я перехожу к информации профиля и как ее обновить после регистрации на веб-сайте.
У меня есть следующий UserProfile в 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 вошедшего в систему пользователя, кажется, что мне удалось сделать это, используя UserProfile.objects.get (user = request.user) и UserProfileForm (request.POST , instance = request.user) но не совсем уверен, что это правильный способ сделать это. В настоящее время мой код заполняет имя_файла, фамилию и адрес электронной почты в форме вывода html, но при обновлении поля и нажатии кнопки «Обновить» он обновляется, но не сохраняется в базе данных.
Недостаточно form.save () или я что-то не так делаю?
Если у вас есть предложение относительно более простого способа сделать это, я ' м все уши. Я также попытался изучить методы UpdateView, но опять же во всех примерах, которые я нашел, всегда были пробелы, и я не мог приспособить его для своих целей. Есть ли какая-либо выгода в использовании UpdateView по сравнению с ModelForm?
Возможно, это длинный и сложный вопрос, но, надеюсь, у вас возникла проблема, и, надеюсь, это поможет другим людям, у которых похожая проблема.