Подтверждение даты Джанго, требуется помощь - PullRequest
0 голосов
/ 21 мая 2018

Я пытался проверить свой 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

1 Ответ

0 голосов
/ 21 мая 2018

Как сказал Бенджамин, валидаторы неявно добавляются только в ModelForms.Больше документации о валидаторах здесь .

Если вы хотите быть уверены, что ни один объект не может быть создан с вашим условием даты, вы должны переопределить его метод сохранения, как показано ниже.Также учтите, что хотя 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)
...