Django 表单字段使用 SelectDateWidget

6 投票
5 回答
22192 浏览
提问于 2025-04-15 11:20

我安装了最新的Django SVN分支,这里面有新的表单功能。我想使用django.forms.extras.widgets里的SelectDateWidget,但这个字段却显示成了普通的日期输入框。

这是我应用里的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

我哪里出错了呢?我查看了forms/extras/widgets.py,发现里面确实有SelectDateWidget这个类。

5 个回答

2

这是 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

关于SelectDateWidget缺少文档的这个问题,来自于这个票据:

票据 #7437

看起来你需要这样使用它:

widget=forms.extras.widgets.SelectDateWidget()

注意这个例子中的括号。

11

真正的问题是,SelectDateWidget 不能这样引用。把代码改成其他方式引用它就解决了我的问题:

from django.forms import extras
...
    DOB = forms.DateField(widget=extras.SelectDateWidget)

这似乎是一个限制,你不能从一个已导入的包中引用 package.package.Class。解决办法是导入 extras,这样引用就变成了 package.Class。

撰写回答