2009-05-01 8 views
6

Ho installato l'ultimo ramo SVN di Django che include i nuovi moduli. Sto cercando di utilizzare SelectDateWidget da django.forms.extras.widgets ma il campo viene visualizzato come un normale widget DateInput.Campo modulo Django con SelectDateWidget

Ecco la forms.py dalla mia applicazione:

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 

Che cosa sto facendo di sbagliato? Controllo dei moduli/extra/widgets.py Vedo che la classe SelectDateWidget esiste.

risposta

10

Il vero problema era che SelectDateWidget non può essere referenziato in questo modo. Cambiare il codice per fare riferimento in modo diverso risolto il mio problema:

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

Questa sembra essere una limitazione che non è possibile fare riferimento package.package.Class da un pacchetto importato. La soluzione importa gli extra in modo che il riferimento sia solo package.Class.

4

Dai re dei biglietti: la mancanza di documentazione per SelectDateWidget qui: Ticket #7437

Sembra che è necessario utilizzare in questo modo:

widget=forms.extras.widgets.SelectDateWidget() 

Nota le parentesi è l'esempio.

+1

buon suggerimento, ma in realtà non c'è bisogno di creare un'istanza della classe Widget quando si passa come l'attributo, se non avete i parametri di configurazione specifici che si desidera che il costruttore del widget avere. Il framework di django Form controlla in realtà per vedere se il widget è una classe o un'istanza e lo istanzia per te se necessario. –

+0

Purtroppo questo non ha funzionato, Jarret ha ragione. – timbonicus

0

Il tuo codice funziona bene per me come scritto. In un caso come questo, controlla la mancata corrispondenza tra il nome del campo nel modello e nel modulo (DOB rispetto a dob è un errore di battitura facile da fare) e che hai istanziato il modulo corretto nella tua vista e lo hai passato al modello.

+0

L'istanziazione del modulo con una vista ha risolto il problema o almeno mi ha portato ad altri problemi più eccitanti. :) Ho avuto un equivoco su come ha funzionato. – timbonicus

1

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