6

我已经从 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

我究竟做错了什么?检查 forms/extras/widgets.py 我看到 SelectDateWidget 类存在。

4

5 回答 5

10

真正的问题是不能以这种方式引用 SelectDateWidget。更改代码以不同方式引用它解决了我的问题:

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

这似乎是您无法从导入的包中引用 package.package.Class 的限制。该解决方案导入了 extras,因此引用只是 package.Class。

于 2009-05-01T18:12:11.733 回答
4

来自票证:此处缺少 SelectDateWidget 的文档: 票证 #7437

看起来您需要像这样使用它:

widget=forms.extras.widgets.SelectDateWidget()

注意括号是例子。

于 2009-05-01T05:45:29.580 回答
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))
于 2018-05-01T07:40:21.993 回答
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))
于 2015-02-04T15:39:56.730 回答
0

你写的代码对我来说很好。在这种情况下,检查模型中的字段名称和表单之间的不匹配(DOBdob容易打错字),并且您已经在视图中实例化了正确的表单,并将其传递给模板。

于 2009-05-01T12:40:00.333 回答