2016-07-29 55 views
-1

我正在使用用于存储学生数据的表单。当我尝试渲染表单时,它会生成文本输入而不是数据。Django - 在模板中呈现日期字段

我如何使用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}} 

回答

1

默认情况下,Django将显示TextInput场,你可以重写你的形式显示DateField渲染日期输入..

class DateInput(forms.DateInput): 
    input_type = 'date' 

class StudentRegisterForm(ModelForm): 
    class Meta: 
     model = StudentRegister 
     fields = '__all__' 
     widgets = { 
      'dob': DateInput() 
     } 
0

使用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

刚上弗拉基米尔·丹尼洛夫

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)) 
前面的回复小幅盘整