Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django form field using SelectDateWidget

I've installed the latest SVN branch from Django which includes the new forms. I'm trying to use the SelectDateWidget from django.forms.extras.widgets but the field is showing up as a normal DateInput widget.

Here is the forms.py from my application:

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

What am I doing wrong? Checking the forms/extras/widgets.py I see the SelectDateWidget class exists.

like image 453
timbonicus Avatar asked May 01 '09 05:05

timbonicus


4 Answers

The real problem was that SelectDateWidget can't be referenced this way. Changing the code to reference it differently solved my problem:

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

This seems to be a limitation that you can't reference package.package.Class from an imported package. The solution imports extras so the reference is just package.Class.

like image 113
timbonicus Avatar answered Sep 20 '22 17:09

timbonicus


From the ticket re: the lack of documentation for SelectDateWidget here: Ticket #7437

It looks like you need to use it like this:

widget=forms.extras.widgets.SelectDateWidget()

Note the parentheses is the example.

like image 24
bchang Avatar answered Sep 22 '22 17:09

bchang


Why not use forms.SelectDateWidget. Just use it as reference.

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))
like image 23
W.Perrin Avatar answered Sep 20 '22 17:09

W.Perrin


Here is the 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))
like image 36
rash Avatar answered Sep 23 '22 17:09

rash