Comment puis-je ajouter la vérification de l'âge à une forme django-inscription?

StackOverflow https://stackoverflow.com/questions/4433030

  •  09-10-2019
  •  | 
  •  

Question

J'ai une application Django qui utilise django-inscription pour gérer l'enregistrement de nouveaux utilisateurs. Je voudrais ajouter la date de naissance du formulaire d'inscription afin que je puisse vérifier l'âge de l'utilisateur avant de décider de leur permettre d'enregistrer. Cependant, je ne ai pas besoin ou même envie de stocker leur date de naissance que des informations de profil. Comment puis-je ajouter à la fiche d'inscription et de valider leur âge dans le cadre du processus d'inscription?

Était-ce utile?

La solution

Étendre le haut-formulaire d'inscription pour ajouter le champ de date de naissance et une méthode de clean_ pour valider qu'il est avant un certain temps. Quelque chose comme:

from datetime import datetime
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        age = (datetime.now() - dob).days/365
        if age < 18:
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob

Dans votre point de vue que vous utilisez DOBRegistrationForm comme vous le feriez le RegistrationForm normal. Si vous utilisez le registration.views.register juste passer la classe comme paramètre form_class.

De cette façon, ils obtiennent une erreur de forme si leur date de naissance ne sont pas dans la plage autorisée sans créer de lignes dans la base de données.

Autres conseils

Il y a une faille mineure dans la réponse de rz en ce qu'elle ne prend pas en années bissextiles.

Si quelqu'un est né le 1er Janvier 1994, le contrôle de la date de naissance mentionné dans la réponse de rz les calculerons comme 18 le 28 Décembre 2011.

Voici une autre version qui prend des années bissextiles:

from datetime import date
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        today = date.today()
        if (dob.year + 18, dob.month, bod.day) > (today.year, today.month, today.day):
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top