Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Editar mi perfil de usuario en una aplicación Django

4 de noviembre de 2014

Muy buenas a todos compañeros.

Tengo un pequeño proyecto de django que consiste en un portal de usuarios meramente. Cada usuario al registrarse simultáneamente genera un perfil respectivo. Mi problema consiste en que si bien un superuser puede editar dicho perfil (el de cualquier usuario), cada usuario no puede editar su propio perfil desde la interfaz de usuario que dispuse para ello.

Tengo una sección en mi portal llamada "profile" sin embargo esta solo me está imprimiendo la misma forma para editar y adicionar perfiles que ve el superuser, cuando pretendo modificar mi perfil (siendo usuario corriente) sencillamente no ocurre nada. Esto se debe a que en vez de modificar el perfil del usuario intenta crear otro. Aquí el código que tengo actualmente:

Francamente no se que estoy haciendo de mal, si bien la creación simultánea de los perfiles con el registro funciona no puedo hacer edición de mi propio perfil desde el punto de vista de usuario.

Agradezco de antemano cualquier sugerencia.


Respuestas

#1

En la definición del formulario tienes lo siguiente:

class userProfileForm(forms.ModelForm):
    # ...

Pero en la acción que maneja el formulario tienes lo siguiente:

def edit_profile(request):
    user = request.user
    user_profile = user.userprofile
 
    if request.method == 'POST':
        user_profile_form = userProfileForm(request.POST)
        # ...

¿Pasándole el request.POST es capaz de obtener automáticamente el tipo de dato requerido por userProfileForm?

@javiereguiluz

4 noviembre 2014, 15:58
#2

En efecto, los datos que me imprime en mi interfaz de usuario corresponden a Nombre, foto y Email todos correspondientes al usuario que se logueó y consultó, sin embargo el embrollo viene cuando quiero modificar algo del perfil por ejemplo subir una foto (por defecto los perfiles recien creados aparecen sin foto), cuando lo intento no me sale nada, no cambia nada.

Si quito el exclude = ['user'] en la definición de mi formulario para profile aparece un nuevo campo en mi interfaz de usuario llamado "usuario", el cual es un menú que al desplegar me da a seleccionar entre todos los usuarios que hay en el sistema, (considero que para empezar esto ya huele mal).

Si selecciono el usuario que está por defecto (el cual es el que está logueado actualmente) y selecciono mi nueva foto este me lanza una alerta de "usuario ya tomado". Es entonces inconfundible que en vez de estar modificando mi perfil estoy sin quererlo intentando adicionar otro nuevo. En sí el formulario imprime bien pero no se si lo que debiera.

@AlexDamas

4 noviembre 2014, 16:30
#3

En la plantilla edit_profile.html, el formulario lo tienes definido así:

{% extends 'base.html' %}
{% block title %} Profile {% endblock %}
{% block content %}
<div>
    <form  method="POST" action=".">
        {% csrf_token %}
        {{ user_profile_form.as_p }}
        <input type="submit" name="edit_profile" value="Hecho">
    </form>
</div>
{% endblock %}

¿No deberías añadir el atributo enctype al elemento <form> para que se suban bien los archivos? Algo así:

{% extends 'base.html' %}
{% block title %} Profile {% endblock %}
{% block content %}
<div>
    <form  method="POST" action="." enctype="multipart/form-data">
        {% csrf_token %}
        {{ user_profile_form.as_p }}
        <input type="submit" name="edit_profile" value="Hecho">
    </form>
</div>
{% endblock %}

@javiereguiluz

4 noviembre 2014, 16:39
#4

Ha funcionado de maravilla!!, puedo modificar el nombre y el correo electrónico desde todos los puntos de vista (admin y user interface) gracias a tu sugerencia =D.

Lo único que me continúa sin funcionar es que al pretender subir una foto para el avatar no me la guarda, desde admin si puedo pero desde user no :S.

@AlexDamas

4 noviembre 2014, 17:05
#5

El método que has definido para generar la ruta donde se sube la imagen parece correcto:

def url(self,filename):
    ruta = "MultimediaData/Users/%s/%s" % (self.user.username, filename)
    return ruta

Así que quizás se trate de un error de permisos y la aplicación no pueda crear los directorios donde se debe guardar la imagen. ¿Los archivos de log de la aplicación o del sistema no muestran ningún mensaje de error relacionado con la subida de la imagen?

@javiereguiluz

4 noviembre 2014, 17:14
#6

No amigo, no me muestra ningun tipo de error o advertencia, ahora que lo mencionas es posible que se trate de permisos, una vez subí un portal que tambien tenía perfiles de usuario, este me reflejaba el mismo error, fue cuando me di la sorpesa que los avatares con la aplicacion desplegada si funcionaban perfectamente mas en local no, considero que el tema se ha resuelto para mí.

Te agradezco mucho la ayuda @javiereguiluz =D

@AlexDamas

4 noviembre 2014, 17:32