Поле формы Django с использованием SelectDateWidget
Вопрос
Я установил последнюю ветку SVN от Django, которая включает в себя новые формы.Я пытаюсь использовать SelectDateWidget из django.forms.extras.widgets, но поле отображается как обычный виджет 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
Что я делаю не так?Проверка форм / дополнений / виджетов.я вижу, что класс SelectDateWidget существует.
Решение
Реальная проблема заключалась в том, что на SelectDateWidget нельзя ссылаться таким образом.Изменение кода, чтобы ссылаться на него по-другому, решило мою проблему:
from django.forms import extras
...
DOB = forms.DateField(widget=extras.SelectDateWidget)
Похоже, это ограничение заключается в том, что вы не можете ссылаться на package.package.Класс из импортированного пакета.Решение импортирует дополнительные компоненты, поэтому ссылка - это просто package.Класс.
Другие советы
Из тикета re:отсутствие документации для SelectDateWidget здесь:Билет №7437
Похоже, вам нужно использовать это следующим образом:
widget=forms.extras.widgets.SelectDateWidget()
Обратите внимание, что скобки - это пример.
Почему бы не использовать 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))
Вот этот 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))
Ваш код отлично работает для меня в том виде, в каком он написан.В подобном случае проверьте, нет ли несоответствий между именем поля в модели и форме (DOB
против dob
это простая опечатка), и что вы создали экземпляр нужной формы в своем представлении и передали ее в шаблон.