2011-02-09 39 views
14

Szukałem sposobów, aby ustawić mój formularz Django tak, aby akceptował tylko daty, które są dzisiaj lub dni w przyszłości. Obecnie mam datepicker jQuery na frontend, ale tutaj jest pole formularza do modelu.Django: Jak ustawić DateField, aby akceptował tylko daty Today & Future

Dzięki za pomoc, bardzo docenione.

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

Odpowiedz

24

Można dodać metodę clean() w formularzu w celu zapewnienia, że ​​data nie jest w przeszłości.

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 

Zobacz http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

+0

Niesamowite dzięki za odpowiedź! – Emile

+1

Występuje błąd w twojej odpowiedzi, jeśli "date Emile

+0

Przepraszam za to, naprawiłem to. – Arnaud

1

Jeśli używasz Django 1.2+ i model będzie zawsze wymusić tę zasadę, można również przyjrzeć model validation. Zaletą tego rozwiązania będzie to, że każdy model modelu oparty na modelu automatycznie użyje tego sprawdzania.