Django1.8から、forms.ChoiceFieldのchoices属性にcallableオブジェクトが渡せるようになりました。
フォームの選択肢を動的に求めたい時に地味に便利です。
以下の例では、現在日時から1時間おきに10件分の選択肢を選べるようにしています。1
forms.py
# -*- coding: utf-8 -*-
from django import forms
from dateutil import rrule
from datetime import datetime
class ExampleForm(forms.Form):
start_at = forms.ChoiceField(
choices=lambda: (
(str(t), t.strftime('%H:%M:%S'))
for t in rrule.rrule(rrule.HOURLY, dtstart=datetime.now(), count=10)
),
)
この書き方にしておくと、ブラウザをリロードするたびに選択肢が変化します。
参考URL: Form fields | Django documentation | Django
-
python-dateutilを使っています。 ↩