0

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}}
0

3 Answers 3

4

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()
        }
0

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))
0

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))

Not the answer you're looking for? Browse other questions tagged or ask your own question.