Поле формы Django с использованием SelectDateWidget - PullRequest
6 голосов
/ 01 мая 2009

Я установил последнюю ветку 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

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

Ответы [ 5 ]

10 голосов
/ 01 мая 2009

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

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

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

4 голосов
/ 01 мая 2009

Из заявки: отсутствие документации по SelectDateWidget здесь: Билет № 7437

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

widget=forms.extras.widgets.SelectDateWidget()

Обратите внимание, что в скобках приведен пример.

2 голосов
/ 01 мая 2018

Почему бы не использовать 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))
1 голос
/ 04 февраля 2015

Вот форма.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))
0 голосов
/ 01 мая 2009

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

...