質問

新しいフォームを含む最新のSVNブランチをDjangoからインストールしました。 django.forms.extras.widgetsのSelectDateWidgetを使用しようとしていますが、フィールドは通常のDateInputウィジェットとして表示されています。

ここに私のアプリケーションからのforms.pyがあります:

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

間違っているのは何ですか? forms / extras / widgets.pyを確認すると、SelectDateWidgetクラスが存在することがわかります。

役に立ちましたか?

解決

実際の問題は、SelectDateWidgetをこの方法で参照できないことです。それを参照するようにコードを変更すると、私の問題が異なって解決されました:

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

これは、インポートされたパッケージからpackage.package.Classを参照できないという制限のようです。ソリューションはエクストラをインポートするため、参照はpackage.Classになります。

他のヒント

チケットre:からSelectDateWidgetのドキュメントが不足しています: チケット#7437

次のように使用する必要があるようです:

widget=forms.extras.widgets.SelectDateWidget()

括弧は例です。

forms.SelectDateWidget を使用しない理由。参照として使用してください。

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

これは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))

書かれているとおり、あなたのコードは私のためにうまく機能します。このような場合、モデルとフォームのフィールド名の不一致( DOB dob は簡単に入力ミスになる)をチェックし、ビューで適切なフォームをインスタンス化し、テンプレートに渡しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top