2009-05-01 3 views
6

Я установил последнюю ветвь SVN из Django, которая включает в себя новые формы. Я пытаюсь использовать SelectDateWidget из django.forms.extras.widgets, но это поле отображается как обычный виджет DateInput.Поле формы Django с помощью 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 

Что я делаю неправильно? Проверка форм/extras/widgets.py Я вижу, что класс SelectDateWidget существует.

ответ

10

Настоящая проблема заключалась в том, что SelectDateWidget нельзя ссылаться таким образом. Изменение кода для ссылки на него по-другому решить мою проблему:

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

Это, кажется, является ограничением, что вы не можете ссылаться на package.package.Class из импортируемого пакета. Решение импортирует дополнительные функции, поэтому ссылка - это просто package.Class.

4

От повторного билета: отсутствие документации для SelectDateWidget здесь: Ticket #7437

Похоже, что вам нужно использовать его как это:

widget=forms.extras.widgets.SelectDateWidget() 

Примечание скобка является примером.

+1

Хорошее предложение, но вы на самом деле не нужно создать экземпляр класса Widget, когда вы передаете его в качестве атрибута, если у вас есть конкретные параметры конфигурации, которые вы хотите, что конструктор виджета иметь. Структура django Form фактически проверяет, является ли виджет классом или экземпляром, и при необходимости создаст его для вас. –

+0

К сожалению, это не сработало, Джаррет прав. – timbonicus

0

Ваш код отлично подходит для меня, как написано. В таком случае проверьте наличие несоответствий между именем поля в модели и форме (DOB по сравнению с dob - это простая опечатка), и вы создали экземпляр правильной формы в своем представлении и передали ее шаблон.

+0

Создание формы с целью решения проблемы, или, по крайней мере, привело меня к другим, более захватывающим проблемам. :) У меня было неправильное понимание того, как это сработало. – timbonicus

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))