2011-02-09 14 views
14

Sono stato alla ricerca di modi per impostare il mio modulo Django per accettare solo date che sono oggi o giorni nel futuro. Al momento ho un datepicker jQuery sul frontend, ma qui è il campo modulo per un modello.Django: Come impostare DateField per accettare solo le date di oggi e future

Grazie per l'aiuto, molto apprezzato.

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

risposta

24

Si potrebbe aggiungere un metodo clean() nel modulo per garantire che la data non è nel passato.

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 

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

+0

Grazie di cuore per la risposta! – Emile

+1

C'è un bug nella tua risposta, se "data Emile

+0

Mi dispiace, l'ho risolto. – Arnaud

1

Se si utilizza Django 1.2+ e il vostro modello sarà sempre forzare questa regola, si può anche dare un'occhiata a model validation. Il vantaggio sarà che qualsiasi modello basato sul modello utilizzerà automaticamente questa convalida.

Problemi correlati