Я очень рано нахожусь в своем пути разработки Django/Python, большинство вещей, которые я смог медленно понять после нескольких часов/дней царапанья головы и проб/ошибок. Теперь у меня есть часто задаваемый вопрос, который я не могу заставить работать правильно:
Как создать представление/форму обновления профиля пользователя?
Я взломал несколько решений из Stack Overflow и просто не могу понять, что я делаю неправильно до сих пор. Вот первоначальная версия моей неудачной попытки с использованием Django 1.9:
#forms.py
class profileForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'email']
#views.py
@login_required
def profile(request):
if request.method == 'POST':
form = profileForm(data=request.POST, instance=request.user)
update = form.save(commit=False)
update.user = request.user
update.save()
else:
form = profileForm(instance=request.user)
return render(request, 'profile.html', {'form': form})
#urls.py
urlpatterns = [
url(r'^dashboard/$', views.dashboard, name='dashboard'),
url(r'^dashboard/profile$', views.profile, name='profile'),
]
#profile.html
<form action="." method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Update Profile</button>
</form>
Таким образом, текущее поведение моего обновления профиля пользователя заключается в том, чтобы не обновлять ни одно из указанных полей в форме при POST, но страница загружается по другому URL-адресу. Например, URL-адрес формы обновления профиля — /dashboard/profile, который перенаправляет на /dashboard при отправке формы. Если я вручную добавлю адрес электронной почты/имя/фамилия в администраторе Django, он правильно отображается в моей форме... Я просто не могу заставить его сохранять обновленные данные.
У меня действительно была версия приведенного выше кода, которая также выдавала мне ошибки имени пользователя, что, как я предполагаю, могло быть близко к решению? В конце концов, я хотел бы использовать адрес электронной почты в качестве имени пользователя, но я хотел бы выяснить это для себя, когда у меня будет сверхпростая рабочая форма обновления профиля.
Заранее извиняюсь за глупый вопрос, я погуглил и попробовал другие решения, но я либо не могу получить те же начальные ошибки, либо не могу получить рабочую версию, как подробно.
Всем спасибо и хорошего дня/ночи!
ИЗМЕНИТЬ:
Я также пробовал это решение Как обновить объект пользователя без создания нового one?, который также имеет такое же поведение: не обновляет ни одно из указанных полей в форме при POST, но страница загружается по другому URL-адресу... что меня больше смущает, возможно, проблема связана с моим urls.py вместо этого?