Formulário de Atualização do Usuário e Visualização do Django

Estou muito cedo na minha jornada de desenvolvimento do Django / Python, a maioria das coisas que eu tenho sido capaz de descobrir lentamente depois de algumas horas / dias de scratching de cabeça e julgamento / erro. Agora tenho a pergunta mais comum que não consigo trabalhar corretamente:

Como faço para criar uma visualização / formulário de atualização de perfil de usuário?

Eu hackeei várias soluções do Stack Overflow e simplesmente não consigo descobrir o que estou fazendo de errado até agora. Aqui está a versão inicial da minha pobre tentativa usando o 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  {% csrf_token %} {{ form.as_p }}   

Portanto, o comportamento atual da minha visualização de perfil de usuário de atualização é não atualizar nenhum dos campos especificados no formulário no POST, mas a página é carregada em um URL diferente. Por exemplo, o URL do formulário de atualização de perfil é / dashboard / profile, que redireciona para / dashboard no envio do formulário. Se eu adicionar manualmente email / first_name / last_name no admin do Django, ele será exibido corretamente no meu formulário … Eu simplesmente não consigo salvar os dados atualizados.

Eu tinha uma versão do código acima que estava me dando erros de nome de usuário também, o que eu acho que poderia ter sido perto de uma solução? Por fim, gostaria de usar o endereço de e-mail como nome de usuário, mas gostaria de descobrir isso por mim mesmo assim que tiver um formulário de atualização de perfil de trabalho ultra-simples.

Peço desculpas antecipadamente pela pergunta tola, pesquisei e tentei outras soluções, mas ou não consigo os mesmos erros iniciais ou não consigo obter uma versão funcional como detalhada.

Obrigado a todos e tenham um ótimo dia / noite!

EDITAR:

Eu também tentei esta solução Como atualizar o object de usuário sem criar um novo? , que também tem o mesmo comportamento: não atualiza nenhum dos campos especificados no formulário no POST, mas a página carrega para um URL diferente … o que me confunde mais, talvez o problema seja com o meu urls.py em vez disso?

Não há nada específico para os usuários aqui. Você tem dois problemas: o primeiro é por causa de seus URLs. Sua visualização de perfil não termina em uma barra, então a ação do formulário “.” envia para o pai, “/ dashboard”, e não passa pelo código de processamento.

 url(r'/dashboard/profile/$'...) 

Em segundo lugar, o modelo não será atualizado porque você não chamou o método de validação do formulário.

 if request.method == 'POST': form = profileForm(data=request.POST, instance=request.user) if form.is_valid(): form.save() return redirect('somewhere') 

Note que não há razão para usar o commit = false aqui; a instância já é o usuário.