我在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>
替换为表单字段属性的名称。该方法执行特定于该特定属性的任何清理,与它所属的字段类型无关…