Reputation: 345
I am working on a form which is used to stores student data. when I tried to render the form it produces an text input instead of data.
How do i render date input using django
forms.py
class StudentRegister(forms.Form):
firstname = forms.CharField(max_length= 50)
lastname = forms.CharField(max_length = 50, required=False)
mail = forms.EmailField(required=False)
dob = forms.DateField()
html
{{form.dob}}
{{form.dob.error}}
Upvotes: 0
Views: 4227
Reputation: 71
Just a small correction on the previous reply by Vladimir Danilov
from django.forms import SelectDateWidget
# from django.forms.extras.widgets Django < 1.9
from django.utils import timezone
def past_years(ago):
this_year = timezone.now().year
return list(range(this_year-ago-1, this_year)) #<------- Parameters should be inverted here
class StudentRegisterForm(forms.Form):
dob = DateField(widget=SelectDateWidget(years=past_years(100))
Upvotes: 0
Reputation: 2398
Use SelectDateWidget
:
from django.forms import SelectDateWidget
# from django.forms.extras.widgets Django < 1.9
from django.utils import timezone
def past_years(ago):
this_year = timezone.now().year
return list(range(this_year, this_year - ago - 1))
class StudentRegisterForm(forms.Form):
...
dob = DateField(widget=SelectDateWidget(years=past_years(100))
Upvotes: 0
Reputation: 10305
By default Django will display TextInput
field, You can override your form to display DateField
..
class DateInput(forms.DateInput):
input_type = 'date'
class StudentRegisterForm(ModelForm):
class Meta:
model = StudentRegister
fields = '__all__'
widgets = {
'dob': DateInput()
}
Upvotes: 4