我一直在寻找将我的 Django 表单设置为仅接受今天或未来几天的日期的方法。我目前在前端有一个 jQuery 日期选择器,但这里是模型表单的表单字段。
感谢您的帮助,非常感谢。
date = forms.DateField(
label=_("What day?"),
widget=forms.TextInput(),
required=True)
我一直在寻找将我的 Django 表单设置为仅接受今天或未来几天的日期的方法。我目前在前端有一个 jQuery 日期选择器,但这里是模型表单的表单字段。
感谢您的帮助,非常感谢。
date = forms.DateField(
label=_("What day?"),
widget=forms.TextInput(),
required=True)
您可以在表单中添加一个clean()
方法以确保日期不是过去的。
import datetime
class MyForm(forms.Form):
date = forms.DateField(...)
def clean_date(self):
date = self.cleaned_data['date']
if date < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past!")
return date
请参阅http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute
另一个有用的解决方案是使用 validators 关键字参数将验证与字段联系起来。这是保持表单代码清晰并启用验证逻辑重用的便捷方式。例如
def present_or_future_date(value):
if value < datetime.date.today():
raise forms.ValidationError("The date cannot be in the past!")
return value
class MyForm(forms.Form):
date = forms.DateField(...
validators=[present_or_future_date])
如果您使用的是 Django 1.2+,并且您的模型将始终强制执行此规则,您还可以查看模型验证。优点是任何基于模型的模型表单都将自动使用此验证。
发现MinValueValidator也适用于日期。
import datetime
from django.core.validators import MinValueValidator
from django.db import models
...
some_date = models.DateField(validators=[MinValueValidator(datetime.date.today)])