Как я могу добавить подтверждение возраста в форму регистрации django? - PullRequest
4 голосов
/ 13 декабря 2010

У меня есть приложение Django, которое использует django-registration для обработки регистрации нового пользователя.Я хотел бы добавить дату рождения в регистрационную форму, чтобы я мог проверить возраст пользователя, прежде чем решить, разрешить ли ему зарегистрироваться.Однако я не нуждаюсь или даже не хочу хранить их дату рождения в качестве информации профиля.Как я могу добавить это в регистрационную форму и подтвердить их возраст в рамках процесса регистрации?

Ответы [ 2 ]

8 голосов
/ 04 сентября 2011

В ответе rz есть небольшой недостаток: он не учитывает високосные годы.

Если кто-то родился 1 января 1994 года, проверка даты рождения, упомянутая в ответе rz, будет рассчитана как 18 28 декабря 2011 года.

Вот альтернативная версия, которая учитывает високосные годы:

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
5 голосов
/ 13 декабря 2010

Расширьте встроенную регистрационную форму, добавив поле DOB и метод clean_, чтобы проверить, что это раньше определенного времени. Что-то вроде:

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

В своих представлениях вы используете DOBRegistrationForm так же, как и обычные RegistrationForm. Если вы используете registration.views.register, просто передайте класс в качестве параметра form_class.

Таким образом они получат ошибку формы, если их DOB не находится в допустимом диапазоне без создания каких-либо строк в базе данных.

...