Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2014, 18:06
Avatar de stormearth
stormearth
 
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 11 años, 1 mes
Puntos: 2
Editar User data en django usando forms. Comportamiento extraño.

Hola todos. Les agradecería su ayuda puesto que he pasado horas en este error:
en models.py tengo 1 model que se llama "Perfiles" y es un One-to-One field con el model User de django contrib.auth.

Código:
class Perfiles(models.Model):
	usuario = models.OneToOneField(User, null = True)
	descripcion = models.CharField(max_length=250, blank=True, null=True)
...
en forms.py tengo un form que sera usado para editar el User.

Código:
from django.contrib.auth.models import User
class UserForm(forms.ModelForm):
	class Meta:
		model = User
		fields = ('email', 'first_name', 'last_name')
en views.py tengo una funcion que se encargaría (si funcionara) de editar el User:

Código:
def editar_perfil_info(request):
	if request.method == "POST":
		form = UserForm(request.POST)
		if form.is_valid():
			obj = User.objects.get(usuario=request.user)
			if 'email' in form.cleaned_data:
				obj.email = form.cleaned_data['email']
			if 'first_name' in form.cleaned_data:
				obj.first_name = form.cleaned_data['first_name']
			if 'last_name' in form.cleaned_data:
				obj.first_name = form.cleaned_data['last_name']
			obj.save()
			return HttpResponseRedirect(reverse('perfiles:perfil_propio'))
		else:
			pass #!!! enviar errores	
	else:
		perfil_info_form = UserForm()
	context = {'perfil_info_form': perfil_info_form}
	return render(request, 'perfiles/editar_perfil_info.html', context)
Como pueden ver me falta enviar los errores en caso de que el form_is_valid() no pase. El tema es que me he quedado estancado porque cuando corro el runserver y lleno este form no solo no funciona, SI NO QUE TAMBIEN BORRA TODO LO QUE ESE USER TIENE GUARDADO EN LA TABLA PERFILES (la de arriba, que no tiene nada que ver con este form!)

en el html de perfiles/editar_perfil_info.html tengo un form común:

Código:
<p>Edita tus datos {{user.username}}</p>
<form action = "/perfiles/editar_perfil_des/" method = "post">
	{% csrf_token %}
	<ul>
		{{perfil_info_form.as_ul}}
	</ul>
	<input type = "submit" name = "submit" value = "Guardar">
</form>

Este es el tipo de errores que le dan ganas a uno de tomar una botella de ron y desistir.
Espero que me puedan ayudar.