Pas en mesure d'ajouter des champs personnalisés à django-inscription
-
05-10-2019 - |
Question
I RegistrationFormUniqueEmail
étendu
class CustomRegistrationFormUniqueEmail(RegistrationFormUniqueEmail):
first_name = forms.CharField(label=_('First name'), max_length=30,required=True)
last_name = forms.CharField(label=_('Last name'), max_length=30, required=True)
def save(self, profile_callback=None):
new_user = super(CustomRegistrationFormUniqueEmail, self).save(profile_callback=profile_callback)
new_user.first_name = self.cleaned_data['first_name']
new_user.last_name = self.cleaned_data['last_name']
return new_user
puis vue changé
# form = form_class(data=request.POST, files=request.FILES)
form = CustomRegistrationFormUniqueEmail(data=request.POST, files=request.FILES)
Mais, je vois encore la forme par défaut qui contient quatre champs uniquement.
La solution
Nous avons récemment mis en place sous forme d'un tel. Voici ce que nous avons fait:
-
Créer une nouvelle
backend
(juste le copier depuis le backend par défaut pour commencer)registration/ backends/ default/ custom/ # <- your new backend
...
-
Dans la nouvelle
urls.py
ajuster les arguments de back-end... { 'backend': 'registration.backends.custom.DefaultBackend' }, ...
-
Créer un
forms.py
souscustom
. Réglez ce formulaire à votre goût (champs et validation) -
Dans le point de
registration/urls.py
au backend approprié:# from registration.backends.default.urls import * from registration.backends.custom.urls import *
Cela devrait fonctionner. En particulier Cela fonctionne parce que:
-
Votre
custom/__init__.py
aura une classeDefaultBackend
avec une méthodeget_form_class
:def get_form_class(self, request): """ Return the default form class used for user registration. """ return RegistrationForm
-
Et vous importez votre propre
RegistrationForm
dans ce fichier aussi:from registration.backends.custom.forms import RegistrationForm
Autres conseils
Je ne suis pas sûr, au large de la main, pourquoi il ne fonctionne pas, mais je suis assez sûr que vous ne pas besoin au views.py
de modifier django-enregistrement ... vous pouvez passer votre nouveau CustomRegistrationFormUniqueEmail
comme un argument en urls.py
.
Vous pouvez essayer de regarder ici extension des signaux à l'aide django-inscription et ici < a href = "http://dmitko.ru/?p=546" rel = "noreferrer nofollow"> http://dmitko.ru/?p=546