2010-12-13 2 views
4

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

ответ

5

Расширьте встроенную регистрационную форму, чтобы добавить поле 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 не находится в допустимом диапазоне без создания каких-либо строк в базе данных.

+0

Отлично! Только проблема с примером заключается в том, что вы не можете вычесть дату из даты, но это привело меня к тому, где я должен был быть. Благодарю. –

+0

Решение, приведенное Трей, более точно. – GetItDone

8

Существует незначительная ошибка в ответе 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 
+0

Спасибо, заметьте, у вас есть bod.day вместо dob.day. слишком мало изменений для редактирования – sidarcy