J'ai un projet django avec l'application django-allauth. J'ai besoin de collecter des données supplémentaires auprès de l'utilisateur lors de l'inscription. Je suis tombé sur une question similaire ici mais malheureusement, personne n'a répondu à la partie personnalisation du profil.
Selon la documentation fournie pourdjango-allauth
:
ACCOUNT_SIGNUP_FORM_CLASS
(=None
)Une chaîne pointant vers une classe de formulaire personnalisée (par exemple
‘myapp.forms.SignupForm’
) qui est utilisée lors de l'inscription pour demander à l'utilisateur une entrée supplémentaire (par exemple, inscription à la newsletter, date de naissance). Cette classe doit implémenter une‘save’
méthode, en acceptant l'utilisateur nouvellement inscrit comme seul paramètre.
Je suis nouveau sur Django et j'ai du mal avec ça. Quelqu'un peut-il fournir un exemple d'une telle classe de formulaire personnalisée? Dois-je également ajouter une classe de modèle avec un lien vers l'objet utilisateur comme celui-ci ?
la source
ACCOUNT_SIGNUP_FORM_CLASS
après la toute première connexion sociale pour collecter et enregistrer les champs de modèle utilisateur personnalisé? De plus, l'utilisation du modèle utilisateur personnalisé par lesAUTH_USER_MODEL
modifications de git: github.com/pennersr/django-allauth ne sont pas téléchargées dans pypi.En utilisant la solution suggérée par pennersr, je recevais un avertissement de dépréciation:
En effet, à partir de la version 0.15, la méthode de sauvegarde a été déconseillée au profit d'une méthode d'inscription def (requête, utilisateur).
Donc, pour résoudre cela, le code de l'exemple devrait être comme ceci:
la source
signup
place desave
.Voici ce qui a fonctionné pour moi en combinant quelques-unes des autres réponses (aucune d'entre elles n'est complète à 100% et sèche).
Dans
yourapp/forms.py
:Et dans
settings.py
:De cette façon, il utilise les formulaires modèles pour qu'il soit SEC, et utilise le nouveau
def signup
. J'ai essayé de mettre'myproject.myapp.forms.SignupForm'
mais cela a entraîné une erreur en quelque sorte.la source
@Shreyas: La solution ci-dessous n'est peut-être pas la plus propre, mais elle fonctionne. S'il vous plaît laissez-moi savoir si vous avez des suggestions pour le nettoyer davantage.
Pour ajouter des informations qui n'appartiennent pas au profil utilisateur par défaut, créez d'abord un modèle dans yourapp / models.py. Lisez la documentation générale de django pour en savoir plus, mais en gros:
Créez ensuite un formulaire dans yourapp / forms.py:
la source
Dans votre
users/forms.py
vous mettez:Dans settings.py vous mettez:
De cette façon, vous ne cassez pas le principe DRY par la multiplicité de la définition des champs des modèles utilisateur.
la source
J'ai essayé de nombreux tutoriels différents et il leur manque quelque chose, répéter du code inutile ou faire des choses bizarres, ci-dessous suit ma solution qui rejoint toutes les options que j'ai trouvées, ça marche, je l'ai déjà mis en production MAIS ça toujours pas me convaincre parce que je m'attendrais à recevoir le prénom et le nom dans les fonctions que j'ai attachées aux utilisateurs créent pour éviter de créer un profil à l'intérieur du formulaire, mais je ne pourrais pas, par ailleurs, je pense que cela vous aidera.
Models.py
Forms.py
Settings.py
la source
create_user_profile
signal échoue par conception. Deuxièmement, vous pouvez réduire cela à un seul signal, basé surcreated
, en particulier lorsque vous parlez DRY. Et troisièmement, vous effectuez une sauvegarde de profil en appelant user.save () dans votre vue, puis en enregistrant à nouveau le profil avec les données réelles.fields = [...]
avec des accolades au lieu defields = (...)
parenthèses?exclude
place.C'est ça. (:
la source
Créer un modèle de profil avec l'utilisateur comme OneToOneField
la source