我有一个正在使用的Django应用程序 Django注册 处理新的用户注册。我想将出生日期添加到注册表中,以便在决定是否允许他们注册之前检查用户的年龄。但是,我不需要甚至不想将其出生日期存储为个人资料信息。如何将其添加到注册表中并验证其年龄作为注册过程的一部分?

有帮助吗?

解决方案

扩展内置的注册表格,以添加DOB字段和清洁_方法,以验证它在一定时间之前。就像是:

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不在允许的范围内,他们就会遇到表单错误。

其他提示

RZ的回答存在一个小缺陷,因为它没有考虑到LEAP年。

如果某人于1994年1月1日出生,RZ答案中提到的生日支票将计算为2011年12月28日的18岁。

这是一个替代版本,考虑了LEAP年:

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