Tengo un proyecto de django con la aplicación django-allauth. Necesito recopilar datos adicionales del usuario al registrarme. Me encontré con una pregunta similar aquí, pero desafortunadamente, nadie respondió la parte de personalización del perfil.
Según la documentación proporcionada paradjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Una cadena que apunta a una clase de formulario personalizado (p
‘myapp.forms.SignupForm’
. Ej. ) Que se utiliza durante el registro para pedirle al usuario información adicional (p. Ej., Suscripción al boletín informativo, fecha de nacimiento). Esta clase debería implementar un‘save’
método, aceptando al usuario recién registrado como su único parámetro.
Soy nuevo en django y estoy luchando con esto. ¿Alguien puede proporcionar un ejemplo de una clase de formulario personalizada? ¿Necesito agregar una clase de modelo también con un enlace al objeto de usuario como este ?
fuente
ACCOUNT_SIGNUP_FORM_CLASS
después del primer inicio de sesión social para recopilar y guardar los campos del modelo de usuario personalizado? Además, el uso del modelo de usuario personalizado porAUTH_USER_MODEL
cambios de git: github.com/pennersr/django-allauth no se carga en pypi.Usando la solución sugerida por pennersr, estaba obteniendo una DeprecationWarning:
Esto se debe a que a partir de la versión 0.15, el método de guardado ha quedado obsoleto en favor de un método de registro def (solicitud, usuario).
Entonces, para resolver esto, el código del ejemplo debería ser así:
fuente
signup
lugar desave
.Esto es lo que funcionó para mí combinando algunas de las otras respuestas (ninguna de ellas está 100% completa y SECA).
En
yourapp/forms.py
:Y en
settings.py
:De esta manera usa los formularios del modelo para que esté SECO, y usa el nuevo
def signup
. Intenté poner'myproject.myapp.forms.SignupForm'
pero eso resultó en un error de alguna manera.fuente
@Shreyas: Es posible que la siguiente solución no sea la más limpia, pero funciona. Por favor, avíseme si tiene alguna sugerencia para limpiarlo más.
Para agregar información que no pertenece al perfil de usuario predeterminado, primero cree un modelo en yourapp / models.py. Lea la documentación general de django para obtener más información al respecto, pero básicamente:
Luego crea un formulario en tu aplicación / formularios.py:
fuente
En tu
users/forms.py
pones:En settings.py pones:
De esta forma no se rompe el principio DRY por multiplicidad Definición de campos de modelos de usuario.
fuente
He probado muchos tutoriales diferentes y a todos les falta algo, repiten código innecesario o hacen cosas raras, a continuación sigue mi solución que une todas las opciones que encontré, está funcionando, ya lo puse en producción PERO todavía no me convence porque esperaría recibir first_name y last_name dentro de las funciones que adjunté a Users create para evitar crear un perfil dentro del formulario, pero no pude, por cierto, creo que te ayudará.
Models.py
Forms.py
Settings.py
fuente
create_user_profile
señal falla por diseño. En segundo lugar, puede reducir esto a una señal, en función decreated
, especialmente cuando se habla en SECO. Y tercero, efectúa un guardado de perfil llamando a user.save () en su vista, luego guardando el perfil nuevamente con los datos reales.fields = [...]
con llaves en lugar defields = (...)
paréntesis?exclude
.Eso es. (:
fuente
Cree un modelo de perfil con el usuario como OneToOneField
fuente