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



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

dob = models.DateField(blank=False, )

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

我刚刚遇到了同样的问题,下面是我为检查最小年龄值的自定义字段验证器提供的解决方案:

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):
    message = _("Age must be at least %(limit_value)d.")
    code = 'min_age'
    def compare(self, a, b):
        return calculate_age(a) < b

calculate_age片段来自这篇文章。

用法:

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

您需要创建自定义字段验证器。

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

然后要计算年龄,请使用此片段来正确覆盖闰年。

最新更新