Pregunta

He instalado la última rama SVN de Django que incluye los nuevos formularios. Estoy tratando de usar el widget SelectDateWidget de django.forms.extras.widgets pero el campo se muestra como un widget DateInput normal.

Aquí está el forms.py de mi aplicación:

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

¿Qué estoy haciendo mal? Comprobando los formularios / extras / widgets.py veo que existe la clase SelectDateWidget.

¿Fue útil?

Solución

El verdadero problema era que SelectDateWidget no puede ser referenciado de esta manera. Cambiar el código para hacer referencia de manera diferente resolvió mi problema:

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

Esto parece ser una limitación a la que no puede hacer referencia package.package.Class desde un paquete importado. La solución importa extras, por lo que la referencia es solo package.Class.

Otros consejos

Del boleto re: la falta de documentación para SelectDateWidget aquí: Ticket # 7437

Parece que necesitas usarlo así:

widget=forms.extras.widgets.SelectDateWidget()

Tenga en cuenta que el paréntesis es el ejemplo.

¿Por qué no usar formularios .SelectDateWidget ? Solo úsalo como referencia.

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

Aquí está el 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))

Su código funciona bien para mí como está escrito. En un caso como este, verifique que no haya coincidencias entre el nombre del campo en el modelo y el formulario ( DOB versus dob es un error tipográfico fácil de hacer), y que usted ' instanciamos el formulario correcto en su vista y lo pasamos a la plantilla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top