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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top