Domanda

Ho un'applicazione Django che utilizza django-registrazione per gestire registrazione nuovo utente. Vorrei aggiungere la data di nascita al modulo di registrazione in modo che posso controllare l'età dell'utente prima di decidere se consentire loro di registrare. Tuttavia non ho bisogno o anche voglia di conservare la loro data di nascita, come le informazioni sul profilo. Come posso aggiungere questo per il modulo di registrazione e convalidare la loro età come parte del processo di registrazione?

È stato utile?

Soluzione

Estendere il built-in modulo di registrazione per aggiungere il campo DOB ??e un metodo Clean_ per verificare che si tratta prima di un certo tempo. Qualcosa di simile:

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

Nel vostro punto di vista si usa DOBRegistrationForm proprio come si farebbe il RegistrationForm normale. Se si utilizza il registration.views.register basta passare la classe come parametro form_class.

In questo modo si otterrà un errore di modulo se la loro DOB ??non è nel range consentito senza creare alcuna riga nel database.

Altri suggerimenti

C'è un minore difetto nella risposta di RZ, in quanto non tiene conto di anni bisestili.

Se qualcuno è nato il 1 ° gennaio 1994 la data di nascita di controllo di cui la risposta di rz li calcola come il 18, il 28 dicembre, 2011.

Ecco una versione alternativa che richiede anni bisestili in considerazione:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top