Django: как настроить DateField, чтобы принимать только даты сегодня и будущего - PullRequest
17 голосов
/ 09 февраля 2011

Я искал способы настроить мою форму Django так, чтобы она принимала только даты, которые есть сегодня или дни в будущем.В настоящее время у меня есть jQuery datepicker на веб-интерфейсе, но вот поле формы для модели.

Спасибо за помощь, очень признателен.

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

Ответы [ 3 ]

28 голосов
/ 09 февраля 2011

Вы можете добавить метод 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

6 голосов
/ 12 марта 2018

Другое полезное решение - связать валидацию с полями, используя аргумент ключевого слова 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])
2 голосов
/ 09 февраля 2011

Если вы используете Django 1.2+ и ваша модель всегда будет применять это правило, вы также можете взглянуть на подтверждение модели . Преимущество будет в том, что любая форма модели, основанная на модели, будет автоматически использовать эту проверку.

...