Django Formularfeld mit SelectDateWidget
Frage
Ich habe den neuesten SVN-Zweig von Django installiert, die die neuen Formen enthält. Ich versuche, die SelectDateWidget von django.forms.extras.widgets zu verwenden, aber das Feld ist als ein normales Widget zeigt sich dateinput.
Hier ist die forms.py aus meiner Anwendung:
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
Was mache ich falsch? Überprüfen Sie die Formulare / Extras / widgets.py ich die SelectDateWidget-Klasse existiert.
Lösung
Das eigentliche Problem war, dass SelectDateWidget kann auf diese Weise nicht referenziert werden. Änderung des Codes zu verweisen es anders mein Problem gelöst:
from django.forms import extras
...
DOB = forms.DateField(widget=extras.SelectDateWidget)
Dies scheint eine Einschränkung zu sein, dass Sie nicht package.package.Class aus einem importierten Paket verweisen können. Die Lösung importiert Extras, so dass die Referenz nur package.class.
Andere Tipps
Aus dem Ticket re: der Mangel an Dokumentation für SelectDateWidget hier: Ticket # 7437
Es sieht aus wie Sie es wie folgt verwenden müssen:
widget=forms.extras.widgets.SelectDateWidget()
die Klammern Hinweis ist das Beispiel.
Warum forms.SelectDateWidget
nicht. Verwenden Sie sie einfach als Referenz.
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))
Hier ist die 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))
Der Code funktioniert gut für mich geschrieben. In einem Fall wie diesem, überprüfen Sie für Fehlpaarungen zwischen dem Namen des Feldes in dem Modell und Form (DOB
gegen dob
eine einfache Tippfehler zu machen ist), und dass Sie haben die richtige Form Ihrer Ansicht nach instanziiert, und übergeben es an die Vorlage.