Django как предотвратить принятие будущей даты?

Я добавил эту валидацию в мой froms.py для предотвращения принятия будущей даты. Но я не понимаю, почему это не работает, и формы по-прежнему отправляются с будущей датой. Вот мой код:

import datetime
 
class AddPatientFrom(forms.ModelForm):
         
         date_of_birth =  forms.DateField(widget=forms.DateInput(attrs={'class': 'form-control','type':'date'}),required=True)
       
         class Meta:
             model = Patient
             fields = ['date_of_birth']
         
         def clean_date(self):
                date = self.cleaned_data['date_of_birth']
                if date < datetime.date.today():
                    raise forms.ValidationError("The date cannot be in the past!")
                return date   

Я также хочу знать, как отключить выбор будущей даты из стандартного html-календаря Django?

Вы проверяете обратное: будет выдана ошибка, если дата рождения до сегодня. Вы должны проверить, является ли дата рождения после сегодняшней при возникновении ошибки валидации, так:

def clean_date_of_birth(self):
    date = self.cleaned_data['date_of_birth']
    if date > datetime.date.today():  # 🖘 raise error if greater than
        raise forms.ValidationError("The date cannot be in the past!")
    return date

Ваша логика валидации вызывает ошибку только для прошлых дат, но не для будущих.

Более того, для валидации поля date_of_birth необходимо реализовать метод clean_date_of_birth.

From Form and field validation docs.

Метод clean_<fieldname>() вызывается на подклассе формы - где <fieldname> заменяется на имя атрибута поля формы. Этот метод выполняет любую очистку, специфичную для данного атрибута, не связанную с типом поля, которым он является...

Вернуться на верх