0

ここではuserenaを使用しており、ProfileFormはuserenaが提供するEditProfileForm(これはモデルフォームです)を拡張しています。

これがforms.pyの私のコードです

class ProfileForm(EditProfileForm):
    contact = forms.CharField(label="Contact Number")
    birthday = forms.DateField(widget=SelectDateWidget(years=reversed(range(1930, datetime.date.today().year))))
    gender = forms.ChoiceField(widget=forms.RadioSelect, choices=GENDER, label="Gender")

    class Meta:
        model = get_profile_model()
        exclude = ['mugshot', 'privacy', 'user']

    def save(self, force_insert=False, force_update=False, commit=True):
       [...]

レンダリングされたページから、日付と月が正常に表示されていますが、ページの最初の読み込みで年が2012(正しい年は1981)と表示され、次にもう一度更新すると、年の選択フィールドが空になります(なぜ?2012は表示されません)もうアップ)。

SelectDateWidgetを削除すると正常に表示されるため、渡されたデータは正しいと確信しています。また、フォームに渡されるデータの種類を確認しましたが、正しい値でdatetime.dateとして正しく入力されています。

私の推測では、SelectDateWidgetコードに何か問題があるのではないかと思いますが、そこにも問題は見つかりません。さらに、自分のコードは他のコードよりも疑わしいです。なぜこれが起こっているのか誰もが知っていますか?渡されたデータは正しいですが、これだけは確かです。

編集:それが役立つ場合、私のsettings.pyにはこれらが含まれています

USE_L10N = False
DATE_FORMAT = 'j  M  Y'
4

1 に答える 1

0

以下から削除することで問題を解決しましたreversed

birthday = forms.DateField(widget=SelectDateWidget(years=reversed(range(1930, datetime.date.today().year))))

次のように置き換えます。

birthday = forms.DateField(widget=SelectDateWidget(years=range(datetime.date.today().year, 1930, -1)))
于 2013-01-02T12:40:34.327 に答える