5

イニシャルが。のフォームがありend_dateます。今年はうるう年であり、現在2月であるため、値エラーが発生しています。

私のコードの終了日は30ですが、うるう年かどうかを検出し、イニシャルend_dateを2月の正しい最終日に設定するコードの記述方法を理解するのに苦労しています。

これがend_dateの初期値を制御するforms.pyです。

class MaturityLetterSetupForm(forms.Form):
def __init__(self, *args, **kwargs):
    from datetime import datetime
    today = datetime.today()
    start_year = today.year
    start_month = today.month
    start_date = datetime(start_year, start_month, 1)
    try:
        end_date = datetime(start_year, start_month, 30)
    except ValueError:
        end_date = datetime(start_year, start_month, ?)

    super(MaturityLetterSetupForm, self).__init__(*args, **kwargs)
    self.fields['start_date'] = forms.DateField(initial=start_date.strftime("%B %d, %Y"),
        widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))

    self.fields['end_date'] = forms.DateField(initial=end_date.strftime("%B %d, %Y"),
        widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))

編集 @Paulに話しかけた後、私の初期化は次のようになりました。

def __init__(self, *args, **kwargs):
    from datetime import datetime
    import calendar
    today = datetime.today()
    start_year = today.year
    start_month = today.month
    start_date = datetime(start_year, start_month, 1)
    if calendar.isleap(start_year) and today.month == 2:
        end_date = datetime(start_year, start_month, calendar.mdays[today.month]+1)
    else:
        end_date = datetime(start_year, start_month, calendar.mdays[today.month])
    super(MaturityLetterSetupForm, self).__init__(*args, **kwargs)
    self.fields['start_date'] = forms.DateField(initial=start_date.strftime("%B %d, %Y"),
        widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))

    self.fields['end_date'] = forms.DateField(initial=end_date.strftime("%B %d, %Y"),
        widget=forms.TextInput(attrs={'class':'datepicker', 'value': today }))

これは、当月の最終日を検索します。

4

1 に答える 1

11

calendar.isleap(year)はどうですか?

また、これを処理するためにtry/exceptを使用しないでくださいif。条件付きです。何かのようなもの:

if calendar.isleap(year):
    do_stuff
else:
   do_other_stuff
于 2012-02-03T15:41:48.567 に答える