私はフォームの初期値がend_date
です。今年はうるう年で、私たちは現在2月ですので、私はバリューエラーが発生しています。うるう年とそれに応じた設定を調べる
私のコードの終了日は30ですが、うるう年が見つかったコードを書き込んで2月2日の正しい最終日にend_date
を設定する方法がわかりません。ここで
は 私のinitを@Paulに話した後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 }))
EDIT あるになった:
の最後の日を見つけ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 }))
今月
クマ私はあなた 'leapyear場合とfeb'文がブール論理内のすべての条件が評価されるなら、私が考える行った場合を見てsidetracked-得るよう:ような何か。私たちはそうではありません([短絡](http://docs.python.org/library/stdtypes.html#boolean-operations-and-or-not))。今のように、48匹のうち12ヵ月が閏年になり、その比較は12匹の月の値を調べなければなりません。しかし、もしあなたが48のうち4回だけそれをfebにして、そしてそれはうるう年の値を調べなければならないでしょう。ハハ。この最適化(?)は、金曜日の午後 –
@j_sykであなたに持ってきました。私はそれを変更しました。 – TheLifeOfSteve
私は新しい、ランダムなものを学ぶのが好きです。この例ではおそらく重要ではないでしょう。 datetimeオブジェクトの属性が非常に高価であることは本当に疑問です。しかし、比較の1つの部分がスキップするのが良いデータベースクエリやその他の重い操作を含む場合は、そのことを念頭に置いておくとよいでしょう。何かを研究するように私に促すために_you_に感謝します! haha –