python 如何在django中正确验证用户是否年满18岁?

4ioopgfo  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(69)

我想验证用户的年龄(birth_date)是否为18+,这是我目前的代码,但它不工作:

...
def min_date():
    return (date.today() - timedelta(days=6570))

class User(BaseModel, RemovabledModel, AbstractUser):
 birth_date = models.DateField(
        verbose_name=_('birth date'),
        help_text=_('Birth date'),
        null=True,
        blank=True,
        validators=[
            MinValueValidator(
                limit_value=min_date(),
                message=("User must be 18 or older")
            ),
        ]
    )

字符串
这可以运行并且是功能性的,但是我仍然可以将用户的年龄设置为今天的日期,而不会像其他验证器那样抛出任何错误消息。
编辑:如果它是相关的,这是相关的验证器:

def min_date(): 
    return (date.today() - timedelta(days=6570)) 

class SignUpSerializer(serializers.Serializer): 
    birth_date = serializers.DateField( 
        write_only=True, 
        required=True, 
        validators=[ 
            MinValueValidator( 
                limit_value=min_date(), 
                message=("User must be 18 or older") ),
        ] 
    )

yrwegjxp

yrwegjxp1#

您可以如下修复模型上的验证(这也意味着您可以从序列化程序中忽略自定义字段):

def min_date():
    return (date.today() - timedelta(days=6570))

class User(BaseModel, RemovabledModel, AbstractUser):
 birth_date = models.DateField(
        verbose_name=_('birth date'),
        help_text=_('Birth date'),
        null=True,
        blank=True,
    )
    def clean(self):
        super().clean()
        if self.birth_date > min_date():
             # raise validation error here

字符串
相关文件
自定义用户模型
当前在模型上的设置方式:
在User模型中的date字段上;您正在验证器中调用min_date()函数,假设您要迁移。
你今天就出发吧。
然后第二天;你就回到了开发阶段你移民,移民;并且应该显示未做任何更改,但是日期字段发生了更改。
min_date函数中的日期将递增。
在这种情况下,迁移并不知道您正在调用一个函数;它只是 * 看到 * 该值。

相关问题