我已经从Django安装了最新的SVN分支,其中包括新的表单。我正在尝试使用django.forms.extras.widgets中的SelectDateWidget,但该字段显示为普通的DateInput小部件。
以下是我的应用程序中的forms.py:
from django import forms
from jacob_forms.models import Client
class ClientForm(forms.ModelForm):
DOB = forms.DateField(widget=forms.extras.widgets.SelectDateWidget)
class Meta:
model = Client
我做错了什么?检查表单/ extras / widgets.py我看到SelectDateWidget类存在。
答案 0 :(得分:10)
真正的问题是SelectDateWidget不能以这种方式引用。更改代码以不同方式引用它解决了我的问题:
from django.forms import extras
...
DOB = forms.DateField(widget=extras.SelectDateWidget)
这似乎是一个限制,您无法从导入的包中引用package.package.Class。该解决方案导入额外内容,因此引用只是package.Class。
答案 1 :(得分:4)
来自故障单:这里缺少SelectDateWidget的文档: Ticket #7437
看起来你需要像这样使用它:
widget=forms.extras.widgets.SelectDateWidget()
请注意括号是示例。
答案 2 :(得分:2)
为什么不使用forms.SelectDateWidget
。只需将其作为参考。
import datetime
from django import forms
class HistDateForm(forms.Form):
cur_year = datetime.datetime.today().year
year_range = tuple([i for i in range(cur_year - 2, cur_year + 2)])
hist_date = forms.DateField(initial=datetime.date.today() - datetime.timedelta(days=7),widget=forms.SelectDateWidget(years=year_range))
答案 3 :(得分:1)
这是form.py
from django import forms
from django.forms import extras
DOY = ('1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987',
'1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995',
'1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003',
'2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011',
'2012', '2013', '2014', '2015')
DOB = forms.DateField(widget=extras.SelectDateWidget(years = DOY))
答案 4 :(得分:0)
你写的代码对我来说很好。在这种情况下,检查模型和表单中字段名称之间的不匹配(DOB
与dob
是一个简单的拼写错误),并且您已经实例化了正确的表单您的视图,并将其传递给模板。