イニシャルが。のフォームがあり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 }))
これは、当月の最終日を検索します。