¿Cómo actualizar el objeto Usuario sin crear uno nuevo?
Siguiendo funciona bien en shell:
>>> from django.contrib.auth.models import User
>>> user=User.objects.get(pk=1)
>>> user.first_name = u'Some'
>>> user.last_name = u'Name'
>>> user.save()
>>> user.first_name
u'Some'
>>> user.last_name
u'Name'
Luego trato de hacer lo mismo con los formularios:
# forms.py
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
# views.py
def edit_names(request, template_name="registration/edit_names.html"):
if request.method == "POST":
form = UserForm(data=request.POST)
if form.is_valid():
user = form.save(commit=False)
user.save()
url = urlresolvers.reverse('my_account')
return HttpResponseRedirect(url)
else:
form = UserForm(instance=request.user)
page_title = _('Edit user names')
return render_to_response(template_name, locals(),
context_instance=RequestContext(request))
# edit_names.html
<form action="." method="post">{% csrf_token %}
<table>
{{ form.as_table }}
<tr><td colspan="2">
<input type="submit" />
</td></tr>
</table>
</form>
Abro la página en el navegador y veo dos camposFirst name
yLast name
. Cuando completo los campos y envío el formulario, aparece el error:
Exception Type: IntegrityError
Exception Value: column username is not unique
También intenté agregar['username']
a la lista de campos en UserForm. Si envío el formulario con mi nombre de usuario (como request.user), el formulario muestra un mensaje de error:
User with this Username already exists.
Si cambio el nombre de usuario a un nombre único, se está creando el nuevo usuario con ese nombre de usuario.
La pregunta es: ¿Cómo puedo actualizar el objeto Usuario, no crear uno nuevo?
o siento por ser tan detallado, pero tuve que buscar mucho aquí y no pude encontrar la respuesta a mi pregunta.
BTW, estos casos no funcionan para mí:
Extender UserCreationForm para incluir correo electrónico, nombre y apellidoadd campo first_name y last_name en django-profile ¿Cómo crear un formulario de Perfil de usuario en Django con modificaciones de nombre y apellido?EDITAR
Como sugerí @fceruti, acabo de agregar en request.method == 'post' ramifica esto:
form = UserForm(data=request.POST, instance=request.user)