Kas*_*zza 9 django validation datefield
我尝试验证我的 DateField 以仅接受今天和未来的日期,但我不知道为什么它接受每个过去的日期。
我的 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
May*_*y.D 12
正如本杰明所说,验证器仅隐式添加到 ModelForms 中。有关验证器的更多文档请参见此处。
如果您想确保无法根据您的日期条件创建任何对象,您应该重写其 save 方法,如下所示。还要注意,虽然 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)
| 归档时间: | 
 | 
| 查看次数: | 11693 次 | 
| 最近记录: |