Как я могу добавить проверку возраста в форму регистрации Django?

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

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top