Frage

Ich habe eine Django-Anwendung, die django-Registrierung wird mit neuen Benutzerregistrierung zu handhaben. Ich mag Geburtsdatum zum Anmeldeformular hinzufügen, so dass ich das Alter des Benutzers überprüfen kann, bevor sie entscheiden, ob sie erlauben, zu registrieren. Allerdings muss ich nicht oder wollen sogar ihr Geburtsdatum als Profilinformationen speichern. Wie kann ich dies auf das Anmeldeformular hinzufügen und ihr Alter als Teil des Registrierungsprozesses validieren?

War es hilfreich?

Lösung

Erweitern Sie die integrierte Anmeldeformular das DOB-Feld und ein clean_ Verfahren zur Validierung hinzufügen, dass es bis zu einem bestimmten Zeitpunkt ist. So etwas wie:

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

Ihre Ansichten benutzen Sie DOBRegistrationForm wie würden Sie den normalen RegistrationForm. Wenn Sie die registration.views.register verwenden Sie einfach die Klasse, die als form_class Parameter übergeben.

So können sie einen Formfehler erhalten, wenn ihre DOB nicht im zulässigen Bereich sind, ohne irgendwelche Zeilen in der Datenbank zu erstellen.

Andere Tipps

Es ist ein kleiner Fehler in rz Antwort, dass es dauert nicht berücksichtigt Schaltjahre.

Wenn jemand am 1. Januar geboren, 1994 die birth Check in rz Antwort erwähnt wird sie berechnen, wie 18 am 28. Dezember seine 2011.

Hier ist eine alternative Version, die Schaltjahre berücksichtigt:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top