我有一个使用django-registration来处理新用户注册的Django应用程序。我想在注册表中添加出生日期,以便我可以在决定是否允许他们注册之前检查用户的年龄。但是,我不需要甚至不想将他们的出生日期存储为个人资料信息。如何将此添加到注册表单并在注册过程中验证其年龄?
答案 0 :(得分:8)
rz的答案存在一个小缺陷,因为它没有考虑到闰年。
如果有人在1994年1月1日出生,rz答案中提到的生日检查将在2011年12月28日计算为18岁。
这是一个考虑闰年的备用版本:
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
答案 1 :(得分: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不在允许的范围内而不在数据库中创建任何行,则会出现表单错误。