Django 日期验证,需要帮助

标签 django validation datefield

我试图验证我的 DateField 只接受今天和 future 的日期,但我不知道为什么它仍然接受每个通过的日期。

我的models.py文件:

def present_or_future_date(value):
    if value < datetime.date.today():
        raise models.ValidationError("The date cannot be in the past!")
    return value

class Event(models.Model):
    title = models.CharField(max_length=50)
    text = models.TextField()
    date = models.DateField(default=datetime.now, validators=[present_or_future_date])
    duration = models.TextField(default='0', blank='true')
    created_at = models.DateTimeField(default=datetime.now, blank='true')

def __str__(self):
    return self.title

最佳答案

正如 Benjamin 所说,验证器仅隐式添加到 ModelForms 中。更多关于验证器的文档 here .

如果您想确保不能使用您的日期条件创建任何对象,您应该覆盖其保存方法,如下所示。还要注意,虽然 Django 会处理简单的日期对象,但最好使用 django.utils.timezone.now

from django.db import models
import datetime
from django.core.exceptions import ValidationError

class Event(models.Model):
    title = models.CharField(max_length=50)
    text = models.TextField()
    date = models.DateField(default=datetime.date.today())
    duration = models.TextField(default='0', blank='true')
    created_at = models.DateTimeField(default=datetime.datetime.now(), blank='true')
    def save(self, *args, **kwargs):
        if self.date < datetime.date.today():
            raise ValidationError("The date cannot be in the past!")
        super(Event, self).save(*args, **kwargs)

关于Django 日期验证,需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50439356/

相关文章:

php - 带验证的通用 PHP/MySql 登录/注册文件

jquery - 如何在jquery中验证金钱

extjs - 如何设置数据字段的默认值-EXTJS 4

Django:从今天开始给日期字段默认值一个月

python - Django 中的多重继承。构造函数的问题

python - 我想在我的简单 Django 项目中使用 Redis-Cache。我无法理解 Django 中的实现

python - 卸载 pip 未使用的包

python - 在pycharm中调试django模板

php - 尽管验证码有效,用户应该如何通过输入无效的电子邮件 ID 在网站上注册?

java - 如何在 Vaadin 中正确验证 DateField?