在django模型中确保DateField验证器超过特定年龄

时间:2013-12-01 16:08:23

标签: django django-models django-forms

我是django的新手,我正在尝试约束一个django模型字段,以便将小于25年的年龄显示为错误(使用日期字段)。所以,我有以下模型:

dob = models.DateField(blank=False, )

我想知道如何在django模型中应用上述约束。 感谢。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,这是我的自定义字段验证程序的解决方案,用于检查最小年龄值:

from django.utils.deconstruct import deconstructible
from django.utils.translation import ugettext_lazy as _
from django.core.validators import BaseValidator
from datetime import date

def calculate_age(born):
    today = date.today()
    return today.year - born.year - \
           ((today.month, today.day) < (born.month, born.day))

@deconstructible
class MinAgeValidator(BaseValidator):
    compare = lambda self, a, b: calculate_age(a) < b
    message = _("Age must be at least %(limit_value)d.")
    code = 'min_age'

calculate_age片段来自this post

用法:

class MyModel(models.Model):
    date_of_birth = models.DateField(validators=[MinAgeValidator(18)])

答案 1 :(得分:0)

您需要创建custom field validator

不幸的是,您需要在验证器函数中对年龄值进行硬编码,因为它不允许您传递任何参数。

然后计算年龄使用this snippet以正确涵盖闰年。