J'essaye de configurer le formulaire d'enregistrement de django avec un champ supplémentaire ou deux. J'ai lu la documentation et parcouru StackOverflow. Je rencontre un problème lorsque l'utilisateur est enregistré avec les nouveaux champs, mais lorsque j'essaie de me connecter, il ne reconnaît pas le mot de passe.django-enregistrement semble raccourcir hashed mot de passe lors de l'utilisation sous-classée RegistrationView
J'ai créé une nouvelle vue (que je viens de couper et de registre collé django-inscription parce que je veux juste courir au départ):
class MyRegistrationView (RegistrationView):
form_class = UserRegForm
def register(self, form):
new_user = RegistrationProfile.objects.create_inactive_user(
form,
site=get_current_site(self.request)
)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=self.request)
return new_user
Il utilise cette forme:
class UserRegForm(RegistrationForm):
CHOICES = Institution.objects.all().order_by('name')
institution=forms.ChoiceField(choices=((x.id, x.name) for x in CHOICES),
required = True)
Ce sont les modèles supplémentaires:
class Institution(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return u'%s' % (self.name)
class UserProfile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
institution=models.ForeignKey(
Institution,
null=True,
blank=True)
def __unicode__(self):
return u'%s' % (self.user)
Mon URL
url(r'^register', views.MyRegistrationView.as_view(form_class=UserRegForm), name='registration_register'),
Et j'ai ajouté cette option pour enregistrer les données: des modèles importer UserProfile des formes d'importation UserRegForm
def user_created(sender, user, request, **kwargs):
form = UserRegForm(request.POST)
try: data = UserProfile.objects.get(user=user)
except: data = UserProfile(user=user)
data.institution = form.data["institution"]
data.save()
from registration.signals import user_registered
user_registered.connect(user_created)
Tout fonctionne en ce que l'utilisateur est enregistré, un e-mail est envoyé, l'institution est enregistré dans UserProfile, mais lorsque j'essaie de me connecter en utilisant le nouvel utilisateur (ayant activé le compte), il me dit que le nom d'utilisateur et le mot de passe ne correspondent pas. Quand je regarde la base de données, la chaîne de hachage paasword semble être 10 caractères plus court que les admins (configuration using manage.py createsuperuser) donc je fais quelque chose que je ne devrais pas ou ne fais pas quelque chose que je devrais faire.
L'aide serait grandement appréciée.