Как я могу добавить проверку возраста в форму регистрации Django?
-
09-10-2019 - |
Вопрос
У меня есть приложение Django, которое использует Django-регистрация Чтобы обработать новую регистрацию пользователя. Я хотел бы добавить дату рождения в регистрационную форму, чтобы я мог проверить возраст пользователя, прежде чем решить, позволять им регистрироваться. Однако мне не нужны или даже хотят хранить свою дату рождения в качестве информации о профиле. Как я могу добавить это в регистрационную форму и подтвердить свой возраст как часть процесса регистрации?
Решение
Расширить встроенный регистрационную форму, чтобы добавить поле 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 не находится в допустимом диапазоне, не создавая строки в базе данных.
Другие советы
В ответе РЗ имеется незначительный недостаток в том, что он не принимает во внимание скаки.
Если кто-то родился 1 января 1994 года, чек рождения, упомянутые в ответе РЗ, рассчитают их как 18 декабря 2011 года.
Вот альтернативная версия, которая принимает во внимание Leap Ise:
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