Django:如何将DateField设置为只接受今天和将来的日期

2024-05-14 06:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在寻找方法,让我的Django表格只接受今天或将来的日期。我目前在前端有一个jQuery日期选择器,但这里是modelform的表单字段。

谢谢你的帮助,非常感谢。

date = forms.DateField(
    label=_("What day?"),
    widget=forms.TextInput(),
    required=True)

Tags: django方法date选择器formstextinputwidgetjquery
3条回答

您可以在表单中添加一个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+,并且您的模型将始终强制执行此规则,那么您还可以查看model validation。其优点是基于模型的任何模型表单都将自动使用此验证。

相关问题 更多 >