siguientes trabajos finos con cáscara:¿Cómo actualizar el objeto Usuario sin crear uno nuevo?
>>> 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'
entonces trato de hacer lo mismo con las formas:
# 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>
puedo abrir la página en el navegador y ver dos campos First name
y Last name
. Cuando relleno en los campos y enviar el formulario consigo el error:
Exception Type: IntegrityError
Exception Value: column username is not unique
También probé añadir ['username']
a la lista de campos de formulario de usuario. Si presento el formulario con mi nombre de usuario (como request.user), se muestra el formulario ErrorMessage:
User with this Username already exists.
Si cambio el nombre de usuario para un nombre único, se crea el nuevo usuario con ese nombre de usuario.
La pregunta es: ¿Cómo puedo actualizar el objeto de usuario, no crear uno nuevo?
Lo siento por ser tan detallado, pero tuve una búsqueda difícil aquí y no pude encontrar la respuesta a mi pregunta.
Por cierto, estos casos no funcionan para mí:
- Extending UserCreationForm to include email, first name, and last name
- add field first_name and last_name in django-profile
- How to create a UserProfile form in Django with first_name, last_name modifications?
EDIT:
como se sugiere @fceruti acabo agregado en req uest.method == 'post' rama esto:
form = UserForm(data=request.POST, instance=request.user)
no habrá una 'petición. user' si se trata de un formulario de registro –
pero es un formulario de usuario de edición: P – fceruti
¡Ah, lo siento, no leí el nombre de la vista –