Django如何防止接受未来日期



我在froms.py中添加了此验证,以防止接受未来日期。但我并没有低估为什么它不起作用,而且现在仍在提交表格,并注明未来日期。这是我的代码:

import datetime
 
class AddPatientFrom(forms.ModelForm):
         
         date_of_birth =  forms.DateField(widget=forms.DateInput(attrs={'class': 'form-control','type':'date'}),required=True)
       
         class Meta:
             model = Patient
             fields = ['date_of_birth']
         
         def clean_date(self):
                date = self.cleaned_data['date_of_birth']
                if date < datetime.date.today():
                    raise forms.ValidationError("The date cannot be in the past!")
                return date   

我还想知道如何禁用Django默认的html日历来选择未来的日期?

您检查的是相反的情况:如果出生日期在今天之前,则会出现错误。当提出验证错误时,您应该检查出生日期是否在今天之后,因此:

def clean_date_of_birth(self):
    date = self.cleaned_data['date_of_birth']
    if date > datetime.date.today():  # 🖘 raise error if greater than
        raise forms.ValidationError("The date cannot be in the future!")
    return date

您的验证逻辑只会为过去的日期而不是未来的日期引发错误。

此外,要验证date_of_birth字段,需要实现clean_date_of_birth方法。

来自表单和字段验证文档。

在表单子类上调用clean_<fieldname>()方法,其中<fieldname>替换为表单字段属性的名称。该方法执行特定于该特定属性的任何清理,与它所属的字段类型无关…

相关内容

  • 没有找到相关文章

最新更新