Domanda

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.

Ecco il form.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

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

È stato utile?

Soluzione

Il vero problema era che a SelectDateWidget non si può fare riferimento in questo modo. La modifica del codice per fare riferimento in modo diverso ha risolto il mio problema:

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

Questa sembra essere una limitazione che non puoi fare riferimento a package.package.Class da un pacchetto importato. La soluzione importa extra, quindi il riferimento è solo package.Class.

Altri suggerimenti

Dal ticket re: la mancanza di documentazione per SelectDateWidget qui: Ticket # 7437

Sembra che tu debba usarlo in questo modo:

widget=forms.extras.widgets.SelectDateWidget()

Nota che le parentesi sono l'esempio.

Perché non usare i moduli . SelezionaDateWidget . Usalo come riferimento.

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

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

Il tuo codice funziona bene per me come scritto. In un caso come questo, controlla la presenza di discrepanze tra il nome del campo nel modello e il modulo ( DOB contro dob è un errore di battitura facile da fare) e che tu ' ho creato un'istanza del modulo giusto nella tua vista e passato al modello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top